{
	"info": {
		"_postman_id": "0237cffa-e86f-4f8b-a7a8-965c232383f5",
		"name": "diploma",
		"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
		"_exporter_id": "16131548"
	},
	"item": [
		{
			"name": "register_and_get_tokens // No Auth",
			"item": [
				{
					"name": "create_users",
					"item": [
						{
							"name": "create_first_user",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseData = pm.response.json();",
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\":{",
											"        \"id\": {\"type\": \"number\"},",
											"        \"username\": {\"type\": \"string\"},",
											"        \"first_name\": {\"type\": \"string\"},",
											"        \"last_name\": {\"type\": \"string\"},",
											"        \"email\": {\"type\": \"string\"}",
											"    },",
											"    \"required\": [\"id\", \"username\", \"first_name\", \"last_name\", \"email\"],",
											"    \"additionalProperties\": false",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 201\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Убедитесь, что запроc на регистрацию нового пользователя, содержащий корректные данные, возвращает ответ со статус-кодом 201\"",
											"    ).to.be.eql(\"Created\");",
											"    const userId = _.get(responseData, \"id\");",
											"    if (userId) {",
											"        pm.collectionVariables.set(\"userId\", userId);",
											"    }",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"email\": {{email}},\n    \"username\": {{username}},\n    \"first_name\": \"Вася\",\n    \"last_name\": \"Пупкин\",\n    \"password\": {{password}}\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/users/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "create_second_user",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseData = pm.response.json();",
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\":{",
											"        \"id\": {\"type\": \"number\"},",
											"        \"username\": {\"type\": \"string\"},",
											"        \"first_name\": {\"type\": \"string\"},",
											"        \"last_name\": {\"type\": \"string\"},",
											"        \"email\": {\"type\": \"string\"}",
											"    },",
											"    \"required\": [\"id\", \"username\", \"first_name\", \"last_name\", \"email\"],",
											"    \"additionalProperties\": false",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 201\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Убедитесь, что запроc на регистрацию нового пользователя, содержащий корректные данные, возвращает ответ со статус-кодом 201\"",
											"    ).to.be.eql(\"Created\");",
											"    const userId = _.get(responseData, \"id\");",
											"    if (userId) {",
											"        pm.collectionVariables.set(\"secondUserId\", userId);",
											"    }",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"email\": {{secondUserEmail}},\n    \"username\": {{secondUserUsername}},\n    \"first_name\": \"Андрей\",\n    \"last_name\": \"Макаревский\",\n    \"password\": {{password}}\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/users/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "create_third_user",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseData = pm.response.json();",
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\":{",
											"        \"id\": {\"type\": \"number\"},",
											"        \"username\": {\"type\": \"string\"},",
											"        \"first_name\": {\"type\": \"string\"},",
											"        \"last_name\": {\"type\": \"string\"},",
											"        \"email\": {\"type\": \"string\"}",
											"    },",
											"    \"required\": [\"id\", \"username\", \"first_name\", \"last_name\", \"email\"],",
											"    \"additionalProperties\": false",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 201\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Убедитесь, что запроc на регистрацию нового пользователя, содержащий корректные данные, возвращает ответ со статус-кодом 201\"",
											"    ).to.be.eql(\"Created\");",
											"    const userId = _.get(responseData, \"id\");",
											"    if (userId) {",
											"        pm.collectionVariables.set(\"thirdUserId\", userId);",
											"    }",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"email\": {{thirdUserEmail}},\n    \"username\": {{thirdUserUsername}},\n    \"first_name\": \"Гордон\",\n    \"last_name\": \"Рамзиков\",\n    \"password\": {{password}}\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/users/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										""
									]
								}
							},
							"response": []
						}
					]
				},
				{
					"name": "get_tokens",
					"item": [
						{
							"name": "get_token_for_first_user",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseData = pm.response.json();",
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\":{",
											"        \"auth_token\": {\"type\": \"string\"},",
											"    },",
											"    \"required\": [\"auth_token\"],",
											"    \"additionalProperties\": false",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Убедитесь, что запроc на получение токена, содержащий корректные данные, возвращает ответ со статус-кодом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											"pm.test('Структура ответа соответствует ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"    const auth_token = _.get(responseData, \"auth_token\");",
											"    if (auth_token) {",
											"        pm.collectionVariables.set(\"userToken\", auth_token);",
											"    }",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"email\": {{email}},\n    \"password\": {{password}}\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/auth/token/login/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"auth",
										"token",
										"login",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "get_token_for_second_user",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseData = pm.response.json();",
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\":{",
											"        \"auth_token\": {\"type\": \"string\"},",
											"    },",
											"    \"required\": [\"auth_token\"],",
											"    \"additionalProperties\": false",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Убедитесь, что запроc на получение токена, содержащий корректные данные, возвращает ответ со статус-кодом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											"pm.test('Структура ответа соответствует ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"    const auth_token = _.get(responseData, \"auth_token\");",
											"    if (auth_token) {",
											"        pm.collectionVariables.set(\"secondUserToken\", auth_token);",
											"    }",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"email\": {{secondUserEmail}},\n    \"password\": {{password}}\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/auth/token/login/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"auth",
										"token",
										"login",
										""
									]
								}
							},
							"response": []
						}
					]
				},
				{
					"name": "create_users_bad_requests",
					"item": [
						{
							"name": "user_registration_without_email",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 400\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Убедитесь, что если в запросе на регистрацию нового пользователя не передан `email` - возвращается ответ со статус-кодом 400\"",
											"    ).to.be.eql(\"Bad Request\");",
											"});",
											""
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"username\": \"NoEmail\",\n    \"first_name\": \"No\",\n    \"last_name\": \"Email\",\n    \"password\": {{password}}\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/users/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "user_registration_without_username",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 400\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Убедитесь, что если в запросе на регистрацию нового пользователя не передан `username`- возвращается ответ со статус-кодом 400\"",
											"    ).to.be.eql(\"Bad Request\");",
											"});",
											""
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"email\": \"no-username@user.ru\",\n    \"first_name\": \"Username\",\n    \"last_name\": \"NotProvided\",\n    \"password\": {{password}}\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/users/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "user_registration_without_first_name",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 400\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Убедитесь, что если в запросе на регистрацию нового пользователя не передан `first_name` - возвращается ответ со статус-кодом 400\"",
											"    ).to.be.eql(\"Bad Request\");",
											"});",
											""
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"username\": \"NoFirstName\",\n    \"email\": \"no-first-name@user.ru\",\n    \"last_name\": \"NoFirstName\",\n    \"password\": {{password}}\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/users/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "user_registration_without_last_name",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 400\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Убедитесь, что если в запросе на регистрацию нового пользователя не передан `last_name` - возвращается ответ со статус-кодом 400\"",
											"    ).to.be.eql(\"Bad Request\");",
											"});",
											""
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"username\": \"NoLastName\",\n    \"email\": \"no-last-name@user.ru\",\n    \"first_name\": \"NoLastName\",\n    \"password\": {{password}}\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/users/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "user_registration_without_password_name",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 400\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Убедитесь, что если в запросе на регистрацию нового пользователя не передан `password` - возвращается ответ со статус-кодом 400\"",
											"    ).to.be.eql(\"Bad Request\");",
											"});",
											""
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"username\": \"NoPassword\",\n    \"email\": \"no-pasword@user.ru\",\n    \"first_name\": \"NoPassword\",\n    \"last_name\": \"NoPassword\"\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/users/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "user_registration_too_long_email",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 400\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Максимальная длина поля `email` должна иметь ограничение в 254 символа\"",
											"    ).to.be.eql(\"Bad Request\")",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"username\": \"TooLongEmail\",\n    \"email\": \"{{tooLongEmail}}\",\n    \"first_name\": \"TooLongEmail\",\n    \"last_name\": \"TooLongEmail\",\n    \"password\": {{password}}\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/users/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "user_registration_too_long_username",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 400\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Максимальная длина поля`username` должна иметь ограничение в 150 символов\"",
											"    ).to.be.eql(\"Bad Request\")",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"username\": \"{{tooLongUsername}}\",\n    \"email\": \"too-long-username@user.ru\",\n    \"first_name\": \"TooLongUsername\",\n    \"last_name\": \"TooLongUsername\",\n    \"password\": {{password}}\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/users/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "user_registration_too_long_first_name",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 400\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Максимальная длина поля`first_name` должна иметь ограничение в 150 символов\"",
											"    ).to.be.eql(\"Bad Request\")",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"username\": \"TooLongFirstName\",\n    \"email\": \"too-long-firt-name@user.ru\",\n    \"first_name\": \"{{tooLongUsername}}\",\n    \"last_name\": \"TooLongFirstName\",\n    \"password\": {{password}}\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/users/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "user_registration_too_long_last_name",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 400\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Максимальная длина поля`last_name` должна иметь ограничение в 150 символов\"",
											"    ).to.be.eql(\"Bad Request\")",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"username\": \"TooLongLastName\",\n    \"email\": \"too-long-last-name@user.ru\",\n    \"first_name\": \"TooLongLastName\",\n    \"last_name\": \"{{tooLongUsername}}\",\n    \"password\": {{password}}\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/users/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "user_registration_with_invalid_username",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 400\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Для поля `username` не должны приниматься значения, не соответствующие регулярному выражению `^[\\w.@+-]+\\Z`\"",
											"    ).to.be.eql(\"Bad Request\")",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"username\": \"InvalidU$ername\",\n    \"email\": \"invalid-username@user.ru\",\n    \"first_name\": \"Invalid\",\n    \"last_name\": \"Username\",\n    \"password\": {{password}}\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/users/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "user_registration_email_in_use",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 400\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Если при регистрации нового пользователя в запрос передан `email` зарегистрированного пользователя - должен вернуться ответ со статусом 400\"",
											"    ).to.be.eql(\"Bad Request\")",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"email\": {{email}},\n    \"username\": \"EmailInUse\",\n    \"first_name\": \"Email\",\n    \"last_name\": \"InUse\",\n    \"password\": {{password}}\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/users/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "user_registration_username_in_use",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 400\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Если при регистрации нового пользователя в запросе передан `username` зарегистрированного пользователя - должен вернуться ответ со статусом 400\"",
											"    ).to.be.eql(\"Bad Request\")",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"email\": \"username-in-use@user.ru\",\n    \"username\": {{username}},\n    \"first_name\": \"Username\",\n    \"last_name\": \"InUse\",\n    \"password\": {{password}}\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/users/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										""
									]
								}
							},
							"response": []
						}
					]
				},
				{
					"name": "get_token_bad_requests",
					"item": [
						{
							"name": "get_token_username_and_email_mismatch",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 400\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Если запрос содержит некорректный пароль должен вернуться ответ со статусом 400\"",
											"    ).to.be.eql(\"Bad Request\")",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"email\": {{secondUserUsername}},\n    \"password\": \"randomPassword\"\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/auth/token/login/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"auth",
										"token",
										"login",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "get_token_no_email",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 400\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Если если в запросе отсутствует `email` должен вернуться ответ со статусом 400\"",
											"    ).to.be.eql(\"Bad Request\")",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"password\": {{password}}\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/auth/token/login/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"auth",
										"token",
										"login",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "get_token_no_password",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 400\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Если если в запросе отсутствует пароль должен вернуться ответ со статусом 400\"",
											"    ).to.be.eql(\"Bad Request\")",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"email\": {{secondUserUsername}}\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/auth/token/login/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"auth",
										"token",
										"login",
										""
									]
								}
							},
							"response": []
						}
					]
				},
				{
					"name": "logout",
					"item": [
						{
							"name": "logout // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 204\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Убедитесь, что запрос зарегистрированного пользователя на удаление токена возвращает статус 204\"",
											"    ).to.be.eql(\"No Content\");",
											"});",
											""
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/auth/token/logout/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"auth",
										"token",
										"logout",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "get_token",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseData = pm.response.json();",
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\":{",
											"        \"auth_token\": {\"type\": \"string\"},",
											"    },",
											"    \"required\": [\"auth_token\"],",
											"    \"additionalProperties\": false",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Убедитесь, что запроc на получение токена, содержащий корректные данные, возвращает ответ со статус-кодом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											"pm.test('Структура ответа соответствует ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"    const auth_token = _.get(responseData, \"auth_token\");",
											"    if (auth_token) {",
											"        pm.collectionVariables.set(\"userToken\", auth_token);",
											"    }",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"email\": {{email}},\n    \"password\": {{password}}\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/auth/token/login/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"auth",
										"token",
										"login",
										""
									]
								}
							},
							"response": []
						}
					]
				}
			],
			"auth": {
				"type": "noauth"
			},
			"event": [
				{
					"listen": "prerequest",
					"script": {
						"type": "text/javascript",
						"exec": [
							""
						]
					}
				},
				{
					"listen": "test",
					"script": {
						"type": "text/javascript",
						"exec": [
							""
						]
					}
				}
			]
		},
		{
			"name": "users",
			"item": [
				{
					"name": "get_user_info",
					"item": [
						{
							"name": "get_user_list // No Auth",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\":{",
											"        \"count\": {\"type\": \"number\"},",
											"        \"next\": {\"type\": [\"string\", \"null\"]},",
											"        \"previous\": {\"type\": [\"string\", \"null\"]},",
											"        \"results\": {",
											"            \"type\": \"array\",",
											"            \"items\": {",
											"                \"type\": \"object\",",
											"                \"properties\": {",
											"                    \"id\": {\"type\": \"number\"},",
											"                    \"username\": {\"type\": \"string\"},",
											"                    \"first_name\": {\"type\": \"string\"},",
											"                    \"last_name\": {\"type\": \"string\"},",
											"                    \"email\": {\"type\": \"string\"},",
											"                    \"is_subscribed\": {\"type\": \"boolean\"}",
											"                },",
											"                \"required\": [\"id\", \"username\", \"first_name\", \"last_name\", \"email\"],",
											"                \"additionalProperties\": false",
											"            }",
											"        }",
											"    },",
											"    \"required\": [\"count\", \"next\", \"previous\", \"results\"],",
											"    \"additionalProperties\": false",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос незарегистрированного пользователя должен вернуть ответ со статус-кодом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.expect(",
											"        pm.response,",
											"        \"Убедитесь, что для запрошенного эндпоинта корректно настроена пагинация\"",
											"    ).to.have.jsonSchema({\"type\": \"object\"});",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/users/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "get_user_list// User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\":{",
											"        \"count\": {\"type\": \"number\"},",
											"        \"next\": {\"type\": [\"string\", \"null\"]},",
											"        \"previous\": {\"type\": [\"string\", \"null\"]},",
											"        \"results\": {",
											"            \"type\": \"array\",",
											"            \"items\": {",
											"                \"type\": \"object\",",
											"                \"properties\": {",
											"                    \"id\": {\"type\": \"number\"},",
											"                    \"username\": {\"type\": \"string\"},",
											"                    \"first_name\": {\"type\": \"string\"},",
											"                    \"last_name\": {\"type\": \"string\"},",
											"                    \"email\": {\"type\": \"string\"},",
											"                    \"is_subscribed\": {\"type\": \"boolean\"}",
											"                },",
											"                \"required\": [\"id\", \"username\", \"first_name\", \"last_name\", \"email\"],",
											"                \"additionalProperties\": false",
											"            }",
											"        }",
											"    },",
											"    \"required\": [\"count\", \"next\", \"previous\", \"results\"],",
											"    \"additionalProperties\": false",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос зарегистрированного пользователя должен вернуть ответ со статус-кодом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.expect(",
											"        pm.response,",
											"        \"Убедитесь, что для запрошенного эндпоинта корректно настроена пагинация\"",
											"    ).to.have.jsonSchema({\"type\": \"object\"});",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/users/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "get_user_list_with_limit_param // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\":{",
											"        \"count\": {\"type\": \"number\"},",
											"        \"next\": {\"type\": [\"string\", \"null\"]},",
											"        \"previous\": {\"type\": [\"string\", \"null\"]},",
											"        \"results\": {",
											"            \"type\": \"array\",",
											"            \"items\": {",
											"                \"type\": \"object\",",
											"                \"properties\": {",
											"                    \"id\": {\"type\": \"number\"},",
											"                    \"username\": {\"type\": \"string\"},",
											"                    \"first_name\": {\"type\": \"string\"},",
											"                    \"last_name\": {\"type\": \"string\"},",
											"                    \"email\": {\"type\": \"string\"},",
											"                    \"is_subscribed\": {\"type\": \"boolean\"}",
											"                },",
											"                \"required\": [\"id\", \"username\", \"first_name\", \"last_name\", \"email\"],",
											"                \"additionalProperties\": false",
											"            }",
											"        }",
											"    },",
											"    \"required\": [\"count\", \"next\", \"previous\", \"results\"],",
											"    \"additionalProperties\": false",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос зарегистрированного пользователя должен вернуть ответ со статус-кодом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.expect(",
											"        pm.response,",
											"        \"Убедитесь, что для запрошенного эндпоинта корректно настроена пагинация\"",
											"    ).to.have.jsonSchema({\"type\": \"object\"});",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});",
											"pm.test(",
											"    \"Убедитесь, что можно изменить количество объектов на странице через параметр `limit`\",",
											"    function () {",
											"        const limit = Number(pm.request.url.query.get(\"limit\"));",
											"        const responseData = pm.response.json();",
											"        pm.expect(",
											"            responseData.results.length,",
											"            \"Убедитесь, что с помощью параметра запроса `limit` можно изменять количество объектов на странице пагинатора\"    ",
											"        ).to.be.eql(limit)",
											"    }",
											");",
											""
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/users/?limit=1",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										""
									],
									"query": [
										{
											"key": "limit",
											"value": "1"
										}
									]
								}
							},
							"response": []
						},
						{
							"name": "get_profile // No Auth",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\": {",
											"        \"id\": {\"type\": \"number\"},",
											"        \"username\": {\"type\": \"string\"},",
											"        \"first_name\": {\"type\": \"string\"},",
											"        \"last_name\": {\"type\": \"string\"},",
											"        \"email\": {\"type\": \"string\"},",
											"        \"is_subscribed\": {\"type\": \"boolean\"}",
											"    },",
											"    \"required\": [\"id\", \"username\", \"first_name\", \"last_name\", \"email\"],",
											"    \"additionalProperties\": false",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос незарегистрированного пользователя должен вернуть ответ со статус-кодом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/users/{{userId}}/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										"{{userId}}",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "get_profile // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\": {",
											"        \"id\": {\"type\": \"number\"},",
											"        \"username\": {\"type\": \"string\"},",
											"        \"first_name\": {\"type\": \"string\"},",
											"        \"last_name\": {\"type\": \"string\"},",
											"        \"email\": {\"type\": \"string\"},",
											"        \"is_subscribed\": {\"type\": \"boolean\"}",
											"    },",
											"    \"required\": [\"id\", \"username\", \"first_name\", \"last_name\", \"email\"],",
											"    \"additionalProperties\": false",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос зарегистрированного пользователя должен вернуть ответ со статус-кодом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/users/{{userId}}/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										"{{userId}}",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "users_me // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseData = pm.response.json();",
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\": {",
											"        \"id\": {\"type\": \"number\"},",
											"        \"username\": {\"type\": \"string\"},",
											"        \"first_name\": {\"type\": \"string\"},",
											"        \"last_name\": {\"type\": \"string\"},",
											"        \"email\": {\"type\": \"string\"},",
											"        \"is_subscribed\": {\"type\": \"boolean\"}",
											"    },",
											"    \"required\": [\"id\", \"username\", \"first_name\", \"last_name\", \"email\", \"is_subscribed\"],",
											"    \"additionalProperties\": false,",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос зарегистрированного пользователя должен вернуть ответ со статус-кодом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});",
											"pm.test(\"Поле `is_subscribed` в ответе должно иметь значение `false`\", function () {",
											"    pm.expect(",
											"        responseData.is_subscribed,",
											"        \"Значение поля `is_subscribed` должно иметь значение `false`\"",
											"    ).to.have.false",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "GET",
								"header": [
									{
										"key": "Authorization",
										"value": "Token 1c9f6142fcd8d84cfd2b865cee88d20d626cd74c",
										"type": "text",
										"disabled": true
									}
								],
								"url": {
									"raw": "{{baseUrl}}/api/users/me/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										"me",
										""
									]
								}
							},
							"response": []
						}
					]
				},
				{
					"name": "reset_password",
					"item": [
						{
							"name": "reset_password // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 204\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Убедитесь, что запрос пользователя с корректными данными возвращает ответ со статусом 204\"",
											"    ).to.be.eql(\"No Content\");",
											"});",
											""
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"current_password\": {{password}},\n    \"new_password\": {{newPassword}}\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/users/set_password/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										"set_password",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "get_token_with_new_password",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseData = pm.response.json();",
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\":{",
											"        \"auth_token\": {\"type\": \"string\"},",
											"    },",
											"    \"required\": [\"auth_token\"],",
											"    \"additionalProperties\": false",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Убедитесь, что после изменения пароля через запрос к `api/users/set_password/`, запроc на получение токена с новым паролем возвращает ответ со статусом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											"pm.test('Структура ответа соответствует ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"    const auth_token = _.get(responseData, \"auth_token\");",
											"    if (auth_token) {",
											"        pm.collectionVariables.set(\"userToken\", auth_token);",
											"    }",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"email\": {{email}},\n    \"password\": {{newPassword}}\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/auth/token/login/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"auth",
										"token",
										"login",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "roll_back_password // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 204\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Убедитесь, что запрос пользователя с корректными данными возвращает ответ со статусом 204\"",
											"    ).to.be.eql(\"No Content\");",
											"});",
											""
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"current_password\": {{newPassword}},\n    \"new_password\": {{password}}\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/users/set_password/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										"set_password",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "get_token_for_first_user",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseData = pm.response.json();",
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\":{",
											"        \"auth_token\": {\"type\": \"string\"},",
											"    },",
											"    \"required\": [\"auth_token\"],",
											"    \"additionalProperties\": false",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Убедитесь, что запроc на получение токена, содержащий корректные данные, возвращает ответ со статус-кодом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											"pm.test('Структура ответа соответствует ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"    const auth_token = _.get(responseData, \"auth_token\");",
											"    if (auth_token) {",
											"        pm.collectionVariables.set(\"userToken\", auth_token);",
											"    }",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"email\": {{email}},\n    \"password\": {{password}}\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/auth/token/login/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"auth",
										"token",
										"login",
										""
									]
								}
							},
							"response": []
						}
					]
				},
				{
					"name": "users_bad_requests",
					"item": [
						{
							"name": "users_me // No Auth",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 401\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос незарегистрированного пользователя должен вернуть ответ со статус-кодом 401\"",
											"    ).to.be.eql(\"Unauthorized\");",
											"});",
											""
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "GET",
								"header": [
									{
										"key": "Authorization",
										"value": "Token 1c9f6142fcd8d84cfd2b865cee88d20d626cd74c",
										"type": "text",
										"disabled": true
									}
								],
								"url": {
									"raw": "{{baseUrl}}/api/users/me/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										"me",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "get_non_existing_profile // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 404\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос к `/api/users/{userId}/` с `id` несуществующего пользователя должен вернуть ответ со статус-кодом 404\"",
											"    ).to.be.eql(\"Not Found\");",
											"});",
											""
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/users/9876/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										"9876",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "reset_password_wrong_password // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 400\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Если поле `current_password` содержит неправильный пароль - должен вернуться ответ со статусом 400\"",
											"    ).to.be.eql(\"Bad Request\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"current_password\": \"wrongPassword\",\n    \"new_password\": {{newPassword}}\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/users/set_password/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										"set_password",
										""
									]
								}
							},
							"response": []
						}
					]
				}
			],
			"auth": {
				"type": "noauth"
			},
			"event": [
				{
					"listen": "prerequest",
					"script": {
						"type": "text/javascript",
						"exec": [
							""
						]
					}
				},
				{
					"listen": "test",
					"script": {
						"type": "text/javascript",
						"exec": [
							""
						]
					}
				}
			]
		},
		{
			"name": "tags",
			"item": [
				{
					"name": "get_tags_info",
					"item": [
						{
							"name": "get_tag_list // No Auth",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseData = pm.response.json();",
											"const responseSchema = {",
											"    \"type\": \"array\",",
											"    \"items\": {",
											"        \"type\": \"object\",",
											"        \"properties\": {",
											"            \"id\": {\"type\": \"number\"},",
											"            \"name\": {\"type\": \"string\"},",
											"            \"color\": {\"type\": \"string\"},",
											"            \"slug\": {\"type\": \"string\"},",
											"        },",
											"        \"required\": [\"id\", \"name\", \"color\", \"slug\"],",
											"        \"additionalProperties\": false",
											"    }",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос незарегистрированного пользователя должен вернуть ответ со статус-кодом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/tags/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"tags",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "get_tag_list // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseData = pm.response.json();",
											"const responseSchema = {",
											"    \"type\": \"array\",",
											"    \"items\": {",
											"        \"type\": \"object\",",
											"        \"properties\": {",
											"            \"id\": {\"type\": \"number\"},",
											"            \"name\": {\"type\": \"string\"},",
											"            \"color\": {\"type\": \"string\"},",
											"            \"slug\": {\"type\": \"string\"},",
											"        },",
											"        \"required\": [\"id\", \"name\", \"color\", \"slug\"],",
											"        \"additionalProperties\": false",
											"    }",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос зарегистрированного пользователя должен вернуть ответ со статус-кодом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"    pm.expect(",
											"        responseData.length >= 3,",
											"        \"Создайте как минимум 3 тега для корректной работы коллекции запросов\"",
											"    ).to.be.true;",
											"    pm.collectionVariables.set(\"firstTagId\", responseData[0].id);",
											"    pm.collectionVariables.set('firstTagSlug', responseData[0].slug);",
											"    pm.collectionVariables.set(\"secondTagId\", responseData[1].id);",
											"    pm.collectionVariables.set('secondTagSlug', responseData[1].slug);",
											"    pm.collectionVariables.set(\"thirdTagId\", responseData[2].id);",
											"    pm.collectionVariables.set('thirdTagSlug', responseData[2].slug);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/tags/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"tags",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "get_tag_detail // No Auth",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseData = pm.response.json();",
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\": {",
											"        \"id\": {\"type\": \"number\"},",
											"        \"name\": {\"type\": \"string\"},",
											"        \"color\": {\"type\": \"string\"},",
											"        \"slug\": {\"type\": \"string\"},",
											"    },",
											"    \"required\": [\"id\", \"name\", \"color\", \"slug\"],",
											"    \"additionalProperties\": false",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос незарегистрированного пользователя должен вернуть ответ со статус-кодом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/tags/{{firstTagId}}/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"tags",
										"{{firstTagId}}",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "get_tag_detail // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseData = pm.response.json();",
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\": {",
											"        \"id\": {\"type\": \"number\"},",
											"        \"name\": {\"type\": \"string\"},",
											"        \"color\": {\"type\": \"string\"},",
											"        \"slug\": {\"type\": \"string\"},",
											"    },",
											"    \"required\": [\"id\", \"name\", \"color\", \"slug\"],",
											"    \"additionalProperties\": false",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос незарегистрированного пользователя должен вернуть ответ со статус-кодом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/tags/{{firstTagId}}/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"tags",
										"{{firstTagId}}",
										""
									]
								}
							},
							"response": []
						}
					]
				},
				{
					"name": "tags_bad_requests",
					"item": [
						{
							"name": "get_non_existing_tag // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 404\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос запрос к `/api/tags/{tagId}/`, содержащий `id` несуществующего тега, должен вернуть ответ со статус-кодом 404\"",
											"    ).to.be.eql(\"Not Found\");",
											"});",
											""
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/tags/9876/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"tags",
										"9876",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "create_tag // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 405\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос на создание тега должен вернуть ответ со статус-кодом 405\"",
											"    ).to.be.eql(\"Method Not Allowed\");",
											"});",
											""
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"name\": \"Завтрак\",\n    \"color\": \"#E26CFD\",\n    \"slug\": \"breakfast\"\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/tags/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"tags",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "put_tag // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 405\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос на обновление тега должен вернуть ответ со статус-кодом 405\"",
											"    ).to.be.eql(\"Method Not Allowed\");",
											"});",
											""
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "PUT",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"name\": \"Завтрак\",\n    \"color\": \"#E26CFD\",\n    \"slug\": \"breakfast\"\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/tags/{{firstTagId}}/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"tags",
										"{{firstTagId}}",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "patch_tag // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 405\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос на обновление тега должен вернуть ответ со статус-кодом 405\"",
											"    ).to.be.eql(\"Method Not Allowed\");",
											"});",
											""
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "PATCH",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"name\": \"Завтрак\",\n    \"color\": \"#E26C2D\",\n    \"slug\": \"breakfast\"\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/tags/{{firstTagId}}/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"tags",
										"{{firstTagId}}",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "delete_tag // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 405\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос на удаление тега должен вернуть ответ со статус-кодом 405\"",
											"    ).to.be.eql(\"Method Not Allowed\");",
											"});",
											""
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "DELETE",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/tags/{{firstTagId}}/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"tags",
										"{{firstTagId}}",
										""
									]
								}
							},
							"response": []
						}
					]
				}
			],
			"auth": {
				"type": "noauth"
			},
			"event": [
				{
					"listen": "prerequest",
					"script": {
						"type": "text/javascript",
						"exec": [
							""
						]
					}
				},
				{
					"listen": "test",
					"script": {
						"type": "text/javascript",
						"exec": [
							""
						]
					}
				}
			]
		},
		{
			"name": "ingredients",
			"item": [
				{
					"name": "get_ingradients",
					"item": [
						{
							"name": "get_ingredients_list // No Auth",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseData = pm.response.json();",
											"const responseSchema = {",
											"    \"type\": \"array\",",
											"    \"items\": {",
											"        \"type\": \"object\",",
											"        \"properties\": {",
											"            \"id\": {\"type\": \"number\"},",
											"            \"name\": {\"type\": \"string\"},",
											"            \"measurement_unit\": {\"type\": \"string\"},",
											"        },",
											"        \"required\": [\"id\", \"name\", \"measurement_unit\"],",
											"        \"additionalProperties\": false",
											"    }",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос незарегистрированного пользователя должен вернуть ответ со статус-кодом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/ingredients/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"ingredients",
										""
									],
									"query": [
										{
											"key": "name",
											"value": "Паниф",
											"disabled": true
										}
									]
								}
							},
							"response": []
						},
						{
							"name": "get_ingredients_list // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseData = pm.response.json();",
											"const responseSchema = {",
											"    \"type\": \"array\",",
											"    \"items\": {",
											"        \"type\": \"object\",",
											"        \"properties\": {",
											"            \"id\": {\"type\": \"number\"},",
											"            \"name\": {\"type\": \"string\"},",
											"            \"measurement_unit\": {\"type\": \"string\"},",
											"        },",
											"        \"required\": [\"id\", \"name\", \"measurement_unit\"],",
											"        \"additionalProperties\": false",
											"    }",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос зарегистрированного пользователя должен вернуть ответ со статус-кодом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"    pm.expect(",
											"        responseData.length >= 2,",
											"        \"Создайте в БД как минимум два ингредиента для корректной работы коллекции запросов\"",
											"    )",
											"    pm.collectionVariables.set(\"firstIndredientId\", responseData[0].id);",
											"    pm.collectionVariables.set('ingredientNameFirstLatter', responseData[0].name.slice(0,1))",
											"    pm.collectionVariables.set(\"secondIndredientId\", responseData[1].id);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/ingredients/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"ingredients",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "get_ingredients_list_with_name_filter // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseData = pm.response.json();",
											"const responseSchema = {",
											"    \"type\": \"array\",",
											"    \"items\": {",
											"        \"type\": \"object\",",
											"        \"properties\": {",
											"            \"id\": {\"type\": \"number\"},",
											"            \"name\": {\"type\": \"string\"},",
											"            \"measurement_unit\": {\"type\": \"string\"},",
											"        },",
											"        \"required\": [\"id\", \"name\", \"measurement_unit\"],",
											"        \"additionalProperties\": false",
											"    }",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос зарегистрированного пользователя должен вернуть ответ со статус-кодом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});",
											"pm.test(",
											"    \"Ответ должен содержать данные, удовлетворяющие условиям поиска\",",
											"    function () {",
											"        const assert_msg = \"Ответ должен содержать ингредиенты, начало названия которых совпадает со значением квери-параметра `name`\"",
											"        pm.expect(responseData.length > 0, assert_msg);",
											"        const expectedingredientNameStart = decodeURIComponent(pm.request.url.query.get(\"name\"));",
											"        for (elem of responseData) {",
											"            pm.expect(elem.name.startsWith(expectedingredientNameStart), assert_msg).to.be.true;",
											"        };",
											"});",
											""
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/ingredients/?name={{ingredientNameFirstLatter}}",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"ingredients",
										""
									],
									"query": [
										{
											"key": "name",
											"value": "{{ingredientNameFirstLatter}}"
										}
									]
								}
							},
							"response": []
						},
						{
							"name": "get_ingredient // No Auth",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\": {",
											"        \"id\": {\"type\": \"number\"},",
											"        \"name\": {\"type\": \"string\"},",
											"        \"measurement_unit\": {\"type\": \"string\"},",
											"    },",
											"    \"required\": [\"id\", \"name\", \"measurement_unit\"],",
											"    \"additionalProperties\": false",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос незарегистрированного пользователя должен вернуть ответ со статус-кодом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/ingredients/{{firstIndredientId}}/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"ingredients",
										"{{firstIndredientId}}",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "get_ingredient // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\": {",
											"        \"id\": {\"type\": \"number\"},",
											"        \"name\": {\"type\": \"string\"},",
											"        \"measurement_unit\": {\"type\": \"string\"},",
											"    },",
											"    \"required\": [\"id\", \"name\", \"measurement_unit\"],",
											"    \"additionalProperties\": false",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос зарегистрированного пользователя должен вернуть ответ со статус-кодом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/ingredients/{{firstIndredientId}}/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"ingredients",
										"{{firstIndredientId}}",
										""
									]
								}
							},
							"response": []
						}
					]
				},
				{
					"name": "ingredients_bad_requests",
					"item": [
						{
							"name": "get_non_existing_ingredient // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 404\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос запрос к `/api/ingredients/{ingredientId}/`, содержащий `id` несуществующего ингредиента, должен вернуть ответ со статус-кодом 404\"",
											"    ).to.be.eql(\"Not Found\");",
											"});",
											""
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/ingredients/9876/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"ingredients",
										"9876",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "create_ingredient // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 405\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос на создание ингредиента должен вернуть ответ со статус-кодом 405\"",
											"    ).to.be.eql(\"Method Not Allowed\");",
											"});",
											""
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"name\": \"Капуста квашеная\",\n    \"measurement_unit\": \"кг\"\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/ingredients/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"ingredients",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "put_ingredient // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 405\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос на обновление ингредиента должен вернуть ответ со статус-кодом 405\"",
											"    ).to.be.eql(\"Method Not Allowed\");",
											"});",
											""
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "PUT",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"name\": \"Капуста\",\n    \"measurement_unit\": \"кг\"\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/ingredients/{{firstIndredientId}}/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"ingredients",
										"{{firstIndredientId}}",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "patch_ingredient // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 405\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос на обновление ингредиента должен вернуть ответ со статус-кодом 405\"",
											"    ).to.be.eql(\"Method Not Allowed\");",
											"});",
											""
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "PATCH",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n    \"name\": \"Капуста\",\n    \"measurement_unit\": \"кг\"\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/ingredients/{{firstIndredientId}}/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"ingredients",
										"{{firstIndredientId}}",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "delete_ingredient // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 405\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос на удаление ингредиента должен вернуть ответ со статус-кодом 405\"",
											"    ).to.be.eql(\"Method Not Allowed\");",
											"});",
											""
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "DELETE",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/ingredients/{{firstIndredientId}}/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"ingredients",
										"{{firstIndredientId}}",
										""
									]
								}
							},
							"response": []
						}
					]
				}
			],
			"auth": {
				"type": "noauth"
			},
			"event": [
				{
					"listen": "prerequest",
					"script": {
						"type": "text/javascript",
						"exec": [
							""
						]
					}
				},
				{
					"listen": "test",
					"script": {
						"type": "text/javascript",
						"exec": [
							""
						]
					}
				}
			]
		},
		{
			"name": "recipes",
			"item": [
				{
					"name": "create_recipes",
					"item": [
						{
							"name": "create_first_recipe // Second User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseData = pm.response.json();",
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\":{",
											"        \"id\": {\"type\": \"number\"},",
											"        \"tags\": {",
											"            \"type\": \"array\",",
											"            \"items\": {",
											"                \"type\": \"object\",",
											"                \"properties\": {",
											"                    \"id\": {\"type\": \"number\"},",
											"                    \"name\": {\"type\": \"string\"},",
											"                    \"color\": {\"type\": \"string\"},",
											"                    \"slug\": {\"type\": \"string\"},",
											"                },",
											"                \"required\": [\"id\", \"name\", \"color\", \"slug\"],",
											"                \"additionalProperties\": false",
											"            }",
											"        },",
											"        \"author\": {",
											"            \"type\": \"object\",",
											"            \"properties\": {",
											"                \"id\": {\"type\": \"number\"},",
											"                \"username\": {\"type\": \"string\"},",
											"                \"first_name\": {\"type\": \"string\"},",
											"                \"last_name\": {\"type\": \"string\"},",
											"                \"email\": {\"type\": \"string\"},",
											"                \"is_subscribed\": {\"type\": \"boolean\"}",
											"            },",
											"            \"required\": [\"id\", \"username\", \"first_name\", \"last_name\", \"email\"],",
											"            \"additionalProperties\": false",
											"        },",
											"        \"ingredients\": {",
											"            \"type\": \"array\",",
											"            \"items\": {",
											"                \"type\": \"object\",",
											"                \"properties\": {",
											"                    \"id\": {\"type\": \"number\"},",
											"                    \"name\": {\"type\": \"string\"},",
											"                    \"measurement_unit\": {\"type\": \"string\"},",
											"                    \"amount\": {\"type\": \"number\"}",
											"                },",
											"                \"required\": [\"id\", \"name\", \"measurement_unit\", \"amount\"],",
											"                \"additionalProperties\": false",
											"            }",
											"        },",
											"        \"is_favorited\": {\"type\": \"boolean\"},",
											"        \"is_in_shopping_cart\": {\"type\": \"boolean\"},",
											"        \"name\": {\"type\": \"string\"},",
											"        \"image\": {\"type\": \"string\"},",
											"        \"text\": {\"type\": \"string\"},",
											"        \"cooking_time\": {\"type\": \"number\"}",
											"    },",
											"    \"required\": [",
											"        \"id\", \"tags\", \"author\", \"ingredients\", \"is_favorited\", \"is_in_shopping_cart\",",
											"        \"name\", \"image\", \"text\", \"cooking_time\"",
											"    ],",
											"    \"additionalProperties\": false",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 201\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос зарегистрированного пользователя на создание рецепта, содержащий корректные данные, должен вернуть ответ со статус-кодом 201\"",
											"    ).to.be.eql(\"Created\");",
											"    const recipeId = _.get(responseData, \"id\");",
											"    if (recipeId) {",
											"        pm.collectionVariables.set(\"firstRecipeId\", recipeId);",
											"    }",
											"});",
											"pm.test('Структура ответа должна соответстовать ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": {{firstIngredientAmount}}\n    },\n    {\n      \"id\": {{secondIndredientId}},\n      \"amount\": {{secondIngredientAmount}}\n    }\n  ],\n  \"tags\": [\n    {{firstTagId}},\n    {{secondTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"Нечто съедобное (это не точно)\",\n  \"text\": \"Приготовьте как нибудь эти ингредиеты\",\n  \"cooking_time\": 5\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/recipes/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"recipes",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "create_second_recipe // Second User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseData = pm.response.json();",
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\":{",
											"        \"id\": {\"type\": \"number\"},",
											"        \"tags\": {",
											"            \"type\": \"array\",",
											"            \"items\": {",
											"                \"type\": \"object\",",
											"                \"properties\": {",
											"                    \"id\": {\"type\": \"number\"},",
											"                    \"name\": {\"type\": \"string\"},",
											"                    \"color\": {\"type\": \"string\"},",
											"                    \"slug\": {\"type\": \"string\"},",
											"                },",
											"                \"required\": [\"id\", \"name\", \"color\", \"slug\"],",
											"                \"additionalProperties\": false",
											"            }",
											"        },",
											"        \"author\": {",
											"            \"type\": \"object\",",
											"            \"properties\": {",
											"                \"id\": {\"type\": \"number\"},",
											"                \"username\": {\"type\": \"string\"},",
											"                \"first_name\": {\"type\": \"string\"},",
											"                \"last_name\": {\"type\": \"string\"},",
											"                \"email\": {\"type\": \"string\"},",
											"                \"is_subscribed\": {\"type\": \"boolean\"}",
											"            },",
											"            \"required\": [\"id\", \"username\", \"first_name\", \"last_name\", \"email\"],",
											"            \"additionalProperties\": false",
											"        },",
											"        \"ingredients\": {",
											"            \"type\": \"array\",",
											"            \"items\": {",
											"                \"type\": \"object\",",
											"                \"properties\": {",
											"                    \"id\": {\"type\": \"number\"},",
											"                    \"name\": {\"type\": \"string\"},",
											"                    \"measurement_unit\": {\"type\": \"string\"},",
											"                    \"amount\": {\"type\": \"number\"}",
											"                },",
											"                \"required\": [\"id\", \"name\", \"measurement_unit\", \"amount\"],",
											"                \"additionalProperties\": false",
											"            }",
											"        },",
											"        \"is_favorited\": {\"type\": \"boolean\"},",
											"        \"is_in_shopping_cart\": {\"type\": \"boolean\"},",
											"        \"name\": {\"type\": \"string\"},",
											"        \"image\": {\"type\": \"string\"},",
											"        \"text\": {\"type\": \"string\"},",
											"        \"cooking_time\": {\"type\": \"number\"}",
											"    },",
											"    \"required\": [",
											"        \"id\", \"tags\", \"author\", \"ingredients\", \"is_favorited\", \"is_in_shopping_cart\",",
											"        \"name\", \"image\", \"text\", \"cooking_time\"",
											"    ],",
											"    \"additionalProperties\": false",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 201\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос на создание рецепта, содержащий корректные данные и отправленный зарегистрированным пользователем, должен вернуть ответ со статус-кодом 201\"",
											"    ).to.be.eql(\"Created\");",
											"    const recipeId = _.get(responseData, \"id\");",
											"    if (recipeId) {",
											"        pm.collectionVariables.set(\"secondRecipeId\", recipeId);",
											"    }",
											"});",
											"pm.test('Структура ответа должна соответстовать ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": {{firstIngredientAmount}}\n    },\n    {\n      \"id\": {{secondIndredientId}},\n      \"amount\": {{secondIngredientAmount}}\n    }\n  ],\n  \"tags\": [\n    {{firstTagId}},\n    {{secondTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"Еще одна попытка приготовить еду\",\n  \"text\": \"Вероятно стоит это смешать.\",\n  \"cooking_time\": 10\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/recipes/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"recipes",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "create_third_recipe // Second User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseData = pm.response.json();",
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\":{",
											"        \"id\": {\"type\": \"number\"},",
											"        \"tags\": {",
											"            \"type\": \"array\",",
											"            \"items\": {",
											"                \"type\": \"object\",",
											"                \"properties\": {",
											"                    \"id\": {\"type\": \"number\"},",
											"                    \"name\": {\"type\": \"string\"},",
											"                    \"color\": {\"type\": \"string\"},",
											"                    \"slug\": {\"type\": \"string\"},",
											"                },",
											"                \"required\": [\"id\", \"name\", \"color\", \"slug\"],",
											"                \"additionalProperties\": false",
											"            }",
											"        },",
											"        \"author\": {",
											"            \"type\": \"object\",",
											"            \"properties\": {",
											"                \"id\": {\"type\": \"number\"},",
											"                \"username\": {\"type\": \"string\"},",
											"                \"first_name\": {\"type\": \"string\"},",
											"                \"last_name\": {\"type\": \"string\"},",
											"                \"email\": {\"type\": \"string\"},",
											"                \"is_subscribed\": {\"type\": \"boolean\"}",
											"            },",
											"            \"required\": [\"id\", \"username\", \"first_name\", \"last_name\", \"email\"],",
											"            \"additionalProperties\": false",
											"        },",
											"        \"ingredients\": {",
											"            \"type\": \"array\",",
											"            \"items\": {",
											"                \"type\": \"object\",",
											"                \"properties\": {",
											"                    \"id\": {\"type\": \"number\"},",
											"                    \"name\": {\"type\": \"string\"},",
											"                    \"measurement_unit\": {\"type\": \"string\"},",
											"                    \"amount\": {\"type\": \"number\"}",
											"                },",
											"                \"required\": [\"id\", \"name\", \"measurement_unit\", \"amount\"],",
											"                \"additionalProperties\": false",
											"            }",
											"        },",
											"        \"is_favorited\": {\"type\": \"boolean\"},",
											"        \"is_in_shopping_cart\": {\"type\": \"boolean\"},",
											"        \"name\": {\"type\": \"string\"},",
											"        \"image\": {\"type\": \"string\"},",
											"        \"text\": {\"type\": \"string\"},",
											"        \"cooking_time\": {\"type\": \"number\"}",
											"    },",
											"    \"required\": [",
											"        \"id\", \"tags\", \"author\", \"ingredients\", \"is_favorited\", \"is_in_shopping_cart\",",
											"        \"name\", \"image\", \"text\", \"cooking_time\"",
											"    ],",
											"    \"additionalProperties\": false",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 201\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос на создание рецепта, содержащий корректные данные и отправленный зарегистрированным пользователем, должен вернуть ответ со статус-кодом 201\"",
											"    ).to.be.eql(\"Created\");",
											"    const recipeId = _.get(responseData, \"id\");",
											"    if (recipeId) {",
											"        pm.collectionVariables.set(\"thirdRecipeId\", recipeId);",
											"    }",
											"});",
											"pm.test('Структура ответа должна соответстовать ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": {{firstIngredientAmount}}\n    }\n  ],\n  \"tags\": [\n    {{thirdTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"Еда без дополнительной обработки\",\n  \"text\": \"Просто съесть\",\n  \"cooking_time\": 1\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/recipes/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"recipes",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "create_fourth_recipe // Second User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseData = pm.response.json();",
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\":{",
											"        \"id\": {\"type\": \"number\"},",
											"        \"tags\": {",
											"            \"type\": \"array\",",
											"            \"items\": {",
											"                \"type\": \"object\",",
											"                \"properties\": {",
											"                    \"id\": {\"type\": \"number\"},",
											"                    \"name\": {\"type\": \"string\"},",
											"                    \"color\": {\"type\": \"string\"},",
											"                    \"slug\": {\"type\": \"string\"},",
											"                },",
											"                \"required\": [\"id\", \"name\", \"color\", \"slug\"],",
											"                \"additionalProperties\": false",
											"            }",
											"        },",
											"        \"author\": {",
											"            \"type\": \"object\",",
											"            \"properties\": {",
											"                \"id\": {\"type\": \"number\"},",
											"                \"username\": {\"type\": \"string\"},",
											"                \"first_name\": {\"type\": \"string\"},",
											"                \"last_name\": {\"type\": \"string\"},",
											"                \"email\": {\"type\": \"string\"},",
											"                \"is_subscribed\": {\"type\": \"boolean\"}",
											"            },",
											"            \"required\": [\"id\", \"username\", \"first_name\", \"last_name\", \"email\"],",
											"            \"additionalProperties\": false",
											"        },",
											"        \"ingredients\": {",
											"            \"type\": \"array\",",
											"            \"items\": {",
											"                \"type\": \"object\",",
											"                \"properties\": {",
											"                    \"id\": {\"type\": \"number\"},",
											"                    \"name\": {\"type\": \"string\"},",
											"                    \"measurement_unit\": {\"type\": \"string\"},",
											"                    \"amount\": {\"type\": \"number\"}",
											"                },",
											"                \"required\": [\"id\", \"name\", \"measurement_unit\", \"amount\"],",
											"                \"additionalProperties\": false",
											"            }",
											"        },",
											"        \"is_favorited\": {\"type\": \"boolean\"},",
											"        \"is_in_shopping_cart\": {\"type\": \"boolean\"},",
											"        \"name\": {\"type\": \"string\"},",
											"        \"image\": {\"type\": \"string\"},",
											"        \"text\": {\"type\": \"string\"},",
											"        \"cooking_time\": {\"type\": \"number\"}",
											"    },",
											"    \"required\": [",
											"        \"id\", \"tags\", \"author\", \"ingredients\", \"is_favorited\", \"is_in_shopping_cart\",",
											"        \"name\", \"image\", \"text\", \"cooking_time\"",
											"    ],",
											"    \"additionalProperties\": false",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 201\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос на создание рецепта, содержащий корректные данные и отправленный зарегистрированным пользователем, должен вернуть ответ со статус-кодом 201\"",
											"    ).to.be.eql(\"Created\");",
											"    const recipeId = _.get(responseData, \"id\");",
											"    if (recipeId) {",
											"        pm.collectionVariables.set(\"fourthRecipeId\", recipeId);",
											"    }",
											"});",
											"pm.test('Структура ответа должна соответстовать ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{secondIndredientId}},\n      \"amount\": {{secondIngredientAmount}}\n    }\n  ],\n  \"tags\": [\n    {{firstTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"Нечто жареное\",\n  \"text\": \"Жарить 10 минут\",\n  \"cooking_time\": 10\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/recipes/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"recipes",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "create_fifth_recipe // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseData = pm.response.json();",
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\":{",
											"        \"id\": {\"type\": \"number\"},",
											"        \"tags\": {",
											"            \"type\": \"array\",",
											"            \"items\": {",
											"                \"type\": \"object\",",
											"                \"properties\": {",
											"                    \"id\": {\"type\": \"number\"},",
											"                    \"name\": {\"type\": \"string\"},",
											"                    \"color\": {\"type\": \"string\"},",
											"                    \"slug\": {\"type\": \"string\"},",
											"                },",
											"                \"required\": [\"id\", \"name\", \"color\", \"slug\"],",
											"                \"additionalProperties\": false",
											"            }",
											"        },",
											"        \"author\": {",
											"            \"type\": \"object\",",
											"            \"properties\": {",
											"                \"id\": {\"type\": \"number\"},",
											"                \"username\": {\"type\": \"string\"},",
											"                \"first_name\": {\"type\": \"string\"},",
											"                \"last_name\": {\"type\": \"string\"},",
											"                \"email\": {\"type\": \"string\"},",
											"                \"is_subscribed\": {\"type\": \"boolean\"}",
											"            },",
											"            \"required\": [\"id\", \"username\", \"first_name\", \"last_name\", \"email\"],",
											"            \"additionalProperties\": false",
											"        },",
											"        \"ingredients\": {",
											"            \"type\": \"array\",",
											"            \"items\": {",
											"                \"type\": \"object\",",
											"                \"properties\": {",
											"                    \"id\": {\"type\": \"number\"},",
											"                    \"name\": {\"type\": \"string\"},",
											"                    \"measurement_unit\": {\"type\": \"string\"},",
											"                    \"amount\": {\"type\": \"number\"}",
											"                },",
											"                \"required\": [\"id\", \"name\", \"measurement_unit\", \"amount\"],",
											"                \"additionalProperties\": false",
											"            }",
											"        },",
											"        \"is_favorited\": {\"type\": \"boolean\"},",
											"        \"is_in_shopping_cart\": {\"type\": \"boolean\"},",
											"        \"name\": {\"type\": \"string\"},",
											"        \"image\": {\"type\": \"string\"},",
											"        \"text\": {\"type\": \"string\"},",
											"        \"cooking_time\": {\"type\": \"number\"}",
											"    },",
											"    \"required\": [",
											"        \"id\", \"tags\", \"author\", \"ingredients\", \"is_favorited\", \"is_in_shopping_cart\",",
											"        \"name\", \"image\", \"text\", \"cooking_time\"",
											"    ],",
											"    \"additionalProperties\": false",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 201\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос на создание рецепта, содержащий корректные данные и отправленный зарегистрированным пользователем, должен вернуть ответ со статус-кодом 201\"",
											"    ).to.be.eql(\"Created\");",
											"    const recipeId = _.get(responseData, \"id\");",
											"    if (recipeId) {",
											"        pm.collectionVariables.set(\"fifthRecipeId\", recipeId);",
											"    }",
											"});",
											"pm.test('Структура ответа должна соответстовать ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{secondIndredientId}},\n      \"amount\": {{secondIngredientAmount}}\n    }\n  ],\n  \"tags\": [\n    {{secondTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"Варёное нечто\",\n  \"text\": \"Варить 20 минут\",\n  \"cooking_time\": 25\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/recipes/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"recipes",
										""
									]
								}
							},
							"response": []
						}
					],
					"auth": {
						"type": "apikey",
						"apikey": [
							{
								"key": "key",
								"value": "Authorization",
								"type": "string"
							},
							{
								"key": "value",
								"value": "Token {{secondUserToken}}",
								"type": "string"
							}
						]
					},
					"event": [
						{
							"listen": "prerequest",
							"script": {
								"type": "text/javascript",
								"exec": [
									""
								]
							}
						},
						{
							"listen": "test",
							"script": {
								"type": "text/javascript",
								"exec": [
									""
								]
							}
						}
					]
				},
				{
					"name": "get_recipes",
					"item": [
						{
							"name": "get_recipes_list // No Auth",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"required\": [\"count\", \"next\", \"previous\", \"results\"],",
											"    \"additionalProperties\": false,",
											"    \"properties\": {",
											"        \"count\": {\"type\": \"number\"},",
											"        \"next\": {\"type\": [\"string\", \"null\"]},",
											"        \"previous\": {\"type\": [\"string\", \"null\"]},",
											"        \"results\": {",
											"            \"type\": \"array\",",
											"            \"items\": {",
											"                \"type\": \"object\",",
											"                \"properties\":{",
											"                    \"id\": {\"type\": \"number\"},",
											"                    \"tags\": {",
											"                        \"type\": \"array\",",
											"                        \"items\": {",
											"                            \"type\": \"object\",",
											"                            \"properties\": {",
											"                                \"id\": {\"type\": \"number\"},",
											"                                \"name\": {\"type\": \"string\"},",
											"                                \"color\": {\"type\": \"string\"},",
											"                                \"slug\": {\"type\": \"string\"},",
											"                            },",
											"                            \"required\": [\"id\", \"name\", \"color\", \"slug\"],",
											"                            \"additionalProperties\": false",
											"                        }",
											"                    },",
											"                    \"author\": {",
											"                        \"type\": \"object\",",
											"                        \"properties\": {",
											"                            \"id\": {\"type\": \"number\"},",
											"                            \"username\": {\"type\": \"string\"},",
											"                            \"first_name\": {\"type\": \"string\"},",
											"                            \"last_name\": {\"type\": \"string\"},",
											"                            \"email\": {\"type\": \"string\"},",
											"                            \"is_subscribed\": {\"type\": \"boolean\"}",
											"                        },",
											"                        \"required\": [\"id\", \"username\", \"first_name\", \"last_name\", \"email\"],",
											"                        \"additionalProperties\": false",
											"                    },",
											"                    \"ingredients\": {",
											"                        \"type\": \"array\",",
											"                        \"items\": {",
											"                            \"type\": \"object\",",
											"                            \"properties\": {",
											"                                \"id\": {\"type\": \"number\"},",
											"                                \"name\": {\"type\": \"string\"},",
											"                                \"measurement_unit\": {\"type\": \"string\"},",
											"                                \"amount\": {\"type\": \"number\"}",
											"                            },",
											"                            \"required\": [\"id\", \"name\", \"measurement_unit\", \"amount\"],",
											"                            \"additionalProperties\": false",
											"                        }",
											"                    },",
											"                    \"is_favorited\": {\"type\": \"boolean\"},",
											"                    \"is_in_shopping_cart\": {\"type\": \"boolean\"},",
											"                    \"name\": {\"type\": \"string\"},",
											"                    \"image\": {\"type\": \"string\"},",
											"                    \"text\": {\"type\": \"string\"},",
											"                    \"cooking_time\": {\"type\": \"number\"}",
											"                },",
											"                \"required\": [",
											"                    \"id\", \"tags\", \"author\", \"ingredients\", \"is_favorited\", \"is_in_shopping_cart\",",
											"                    \"name\", \"image\", \"text\", \"cooking_time\"",
											"                ],",
											"                \"additionalProperties\": false",
											"            }",
											"        }",
											"        ",
											"    }",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос незарегистрированного пользователя должен вернуть ответ со статус-кодом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.expect(",
											"        pm.response,",
											"        \"Убедитесь, что для запрошенного эндпоинта корректно настроена пагинация\"",
											"    ).to.have.jsonSchema({\"type\": \"object\"});",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/recipes/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"recipes",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "get_recipes_list // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"required\": [\"count\", \"next\", \"previous\", \"results\"],",
											"    \"additionalProperties\": false,",
											"    \"properties\": {",
											"        \"count\": {\"type\": \"number\"},",
											"        \"next\": {\"type\": [\"string\", \"null\"]},",
											"        \"previous\": {\"type\": [\"string\", \"null\"]},",
											"        \"results\": {",
											"            \"type\": \"array\",",
											"            \"items\": {",
											"                \"type\": \"object\",",
											"                \"properties\":{",
											"                    \"id\": {\"type\": \"number\"},",
											"                    \"tags\": {",
											"                        \"type\": \"array\",",
											"                        \"items\": {",
											"                            \"type\": \"object\",",
											"                            \"properties\": {",
											"                                \"id\": {\"type\": \"number\"},",
											"                                \"name\": {\"type\": \"string\"},",
											"                                \"color\": {\"type\": \"string\"},",
											"                                \"slug\": {\"type\": \"string\"},",
											"                            },",
											"                            \"required\": [\"id\", \"name\", \"color\", \"slug\"],",
											"                            \"additionalProperties\": false",
											"                        }",
											"                    },",
											"                    \"author\": {",
											"                        \"type\": \"object\",",
											"                        \"properties\": {",
											"                            \"id\": {\"type\": \"number\"},",
											"                            \"username\": {\"type\": \"string\"},",
											"                            \"first_name\": {\"type\": \"string\"},",
											"                            \"last_name\": {\"type\": \"string\"},",
											"                            \"email\": {\"type\": \"string\"},",
											"                            \"is_subscribed\": {\"type\": \"boolean\"}",
											"                        },",
											"                        \"required\": [\"id\", \"username\", \"first_name\", \"last_name\", \"email\"],",
											"                        \"additionalProperties\": false",
											"                    },",
											"                    \"ingredients\": {",
											"                        \"type\": \"array\",",
											"                        \"items\": {",
											"                            \"type\": \"object\",",
											"                            \"properties\": {",
											"                                \"id\": {\"type\": \"number\"},",
											"                                \"name\": {\"type\": \"string\"},",
											"                                \"measurement_unit\": {\"type\": \"string\"},",
											"                                \"amount\": {\"type\": \"number\"}",
											"                            },",
											"                            \"required\": [\"id\", \"name\", \"measurement_unit\", \"amount\"],",
											"                            \"additionalProperties\": false",
											"                        }",
											"                    },",
											"                    \"is_favorited\": {\"type\": \"boolean\"},",
											"                    \"is_in_shopping_cart\": {\"type\": \"boolean\"},",
											"                    \"name\": {\"type\": \"string\"},",
											"                    \"image\": {\"type\": \"string\"},",
											"                    \"text\": {\"type\": \"string\"},",
											"                    \"cooking_time\": {\"type\": \"number\"}",
											"                },",
											"                \"required\": [",
											"                    \"id\", \"tags\", \"author\", \"ingredients\", \"is_favorited\", \"is_in_shopping_cart\",",
											"                    \"name\", \"image\", \"text\", \"cooking_time\"",
											"                ],",
											"                \"additionalProperties\": false",
											"            }",
											"        }",
											"        ",
											"    }",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос зарегистрированного пользователя должен вернуть ответ со статус-кодом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.expect(",
											"        pm.response,",
											"        \"Убедитесь, что для запрошенного эндпоинта корректно настроена пагинация\"",
											"    ).to.have.jsonSchema({\"type\": \"object\"});",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/recipes/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"recipes",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "get_recipes_list_with_limit_param // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"required\": [\"count\", \"next\", \"previous\", \"results\"],",
											"    \"additionalProperties\": false,",
											"    \"properties\": {",
											"        \"count\": {\"type\": \"number\"},",
											"        \"next\": {\"type\": [\"string\", \"null\"]},",
											"        \"previous\": {\"type\": [\"string\", \"null\"]},",
											"        \"results\": {",
											"            \"type\": \"array\",",
											"            \"items\": {",
											"                \"type\": \"object\",",
											"                \"properties\":{",
											"                    \"id\": {\"type\": \"number\"},",
											"                    \"tags\": {",
											"                        \"type\": \"array\",",
											"                        \"items\": {",
											"                            \"type\": \"object\",",
											"                            \"properties\": {",
											"                                \"id\": {\"type\": \"number\"},",
											"                                \"name\": {\"type\": \"string\"},",
											"                                \"color\": {\"type\": \"string\"},",
											"                                \"slug\": {\"type\": \"string\"},",
											"                            },",
											"                            \"required\": [\"id\", \"name\", \"color\", \"slug\"],",
											"                            \"additionalProperties\": false",
											"                        }",
											"                    },",
											"                    \"author\": {",
											"                        \"type\": \"object\",",
											"                        \"properties\": {",
											"                            \"id\": {\"type\": \"number\"},",
											"                            \"username\": {\"type\": \"string\"},",
											"                            \"first_name\": {\"type\": \"string\"},",
											"                            \"last_name\": {\"type\": \"string\"},",
											"                            \"email\": {\"type\": \"string\"},",
											"                            \"is_subscribed\": {\"type\": \"boolean\"}",
											"                        },",
											"                        \"required\": [\"id\", \"username\", \"first_name\", \"last_name\", \"email\"],",
											"                        \"additionalProperties\": false",
											"                    },",
											"                    \"ingredients\": {",
											"                        \"type\": \"array\",",
											"                        \"items\": {",
											"                            \"type\": \"object\",",
											"                            \"properties\": {",
											"                                \"id\": {\"type\": \"number\"},",
											"                                \"name\": {\"type\": \"string\"},",
											"                                \"measurement_unit\": {\"type\": \"string\"},",
											"                                \"amount\": {\"type\": \"number\"}",
											"                            },",
											"                            \"required\": [\"id\", \"name\", \"measurement_unit\", \"amount\"],",
											"                            \"additionalProperties\": false",
											"                        }",
											"                    },",
											"                    \"is_favorited\": {\"type\": \"boolean\"},",
											"                    \"is_in_shopping_cart\": {\"type\": \"boolean\"},",
											"                    \"name\": {\"type\": \"string\"},",
											"                    \"image\": {\"type\": \"string\"},",
											"                    \"text\": {\"type\": \"string\"},",
											"                    \"cooking_time\": {\"type\": \"number\"}",
											"                },",
											"                \"required\": [",
											"                    \"id\", \"tags\", \"author\", \"ingredients\", \"is_favorited\", \"is_in_shopping_cart\",",
											"                    \"name\", \"image\", \"text\", \"cooking_time\"",
											"                ],",
											"                \"additionalProperties\": false",
											"            }",
											"        }",
											"        ",
											"    }",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос зарегистрированного пользователя должен вернуть ответ со статус-кодом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.expect(",
											"        pm.response,",
											"        \"Убедитесь, что для запрошенного эндпоинта корректно настроена пагинация\"",
											"    ).to.have.jsonSchema({\"type\": \"object\"});",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});",
											"pm.test(",
											"    \"Должна быть возможность изменить количество объектов на странице через параметр `limit`\",",
											"    function () {",
											"        const limit = Number(pm.request.url.query.get(\"limit\"));",
											"        const responseData = pm.response.json();",
											"        pm.expect(",
											"            responseData.results.length,",
											"            \"Убедитесь, что с помощью параметра запроса `limit` можно изменять количество объектов на странице пагинатора\"    ",
											"        ).to.be.eql(limit)",
											"    }",
											");"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/recipes/?limit=2",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"recipes",
										""
									],
									"query": [
										{
											"key": "limit",
											"value": "2"
										}
									]
								}
							},
							"response": []
						},
						{
							"name": "get_recipes_list_with_author_param // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"required\": [\"count\", \"next\", \"previous\", \"results\"],",
											"    \"additionalProperties\": false,",
											"    \"properties\": {",
											"        \"count\": {\"type\": \"number\"},",
											"        \"next\": {\"type\": [\"string\", \"null\"]},",
											"        \"previous\": {\"type\": [\"string\", \"null\"]},",
											"        \"results\": {",
											"            \"type\": \"array\",",
											"            \"items\": {",
											"                \"type\": \"object\",",
											"                \"properties\":{",
											"                    \"id\": {\"type\": \"number\"},",
											"                    \"tags\": {",
											"                        \"type\": \"array\",",
											"                        \"items\": {",
											"                            \"type\": \"object\",",
											"                            \"properties\": {",
											"                                \"id\": {\"type\": \"number\"},",
											"                                \"name\": {\"type\": \"string\"},",
											"                                \"color\": {\"type\": \"string\"},",
											"                                \"slug\": {\"type\": \"string\"},",
											"                            },",
											"                            \"required\": [\"id\", \"name\", \"color\", \"slug\"],",
											"                            \"additionalProperties\": false",
											"                        }",
											"                    },",
											"                    \"author\": {",
											"                        \"type\": \"object\",",
											"                        \"properties\": {",
											"                            \"id\": {\"type\": \"number\"},",
											"                            \"username\": {\"type\": \"string\"},",
											"                            \"first_name\": {\"type\": \"string\"},",
											"                            \"last_name\": {\"type\": \"string\"},",
											"                            \"email\": {\"type\": \"string\"},",
											"                            \"is_subscribed\": {\"type\": \"boolean\"}",
											"                        },",
											"                        \"required\": [\"id\", \"username\", \"first_name\", \"last_name\", \"email\"],",
											"                        \"additionalProperties\": false",
											"                    },",
											"                    \"ingredients\": {",
											"                        \"type\": \"array\",",
											"                        \"items\": {",
											"                            \"type\": \"object\",",
											"                            \"properties\": {",
											"                                \"id\": {\"type\": \"number\"},",
											"                                \"name\": {\"type\": \"string\"},",
											"                                \"measurement_unit\": {\"type\": \"string\"},",
											"                                \"amount\": {\"type\": \"number\"}",
											"                            },",
											"                            \"required\": [\"id\", \"name\", \"measurement_unit\", \"amount\"],",
											"                            \"additionalProperties\": false",
											"                        }",
											"                    },",
											"                    \"is_favorited\": {\"type\": \"boolean\"},",
											"                    \"is_in_shopping_cart\": {\"type\": \"boolean\"},",
											"                    \"name\": {\"type\": \"string\"},",
											"                    \"image\": {\"type\": \"string\"},",
											"                    \"text\": {\"type\": \"string\"},",
											"                    \"cooking_time\": {\"type\": \"number\"}",
											"                },",
											"                \"required\": [",
											"                    \"id\", \"tags\", \"author\", \"ingredients\", \"is_favorited\", \"is_in_shopping_cart\",",
											"                    \"name\", \"image\", \"text\", \"cooking_time\"",
											"                ],",
											"                \"additionalProperties\": false",
											"            }",
											"        }",
											"        ",
											"    }",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос зарегистрированного пользователя должен вернуть ответ со статус-кодом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.expect(",
											"        pm.response,",
											"        \"Убедитесь, что для запрошенного эндпоинта корректно настроена пагинация\"",
											"    ).to.have.jsonSchema({\"type\": \"object\"});",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});",
											"pm.test(",
											"    \"Должна быть возможность фильтрации рецептов через параметр запроса `author`\",",
											"    function () {",
											"        assert_msg = \"Убедитесь, что с помощью параметра запроса `author` можно отфильтровать рецепты по их автору\" ",
											"        const authorId = Number(pm.request.url.query.get(\"author\"));",
											"        const responseData = pm.response.json();",
											"        pm.expect(",
											"            responseData.results.length > 0,",
											"            assert_msg",
											"        ).to.be.true",
											"        for (elem of responseData.results) {",
											"            pm.expect(",
											"                elem.author.id,",
											"                assert_msg",
											"            ).to.be.eql(authorId);",
											"        };",
											"    }",
											");"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/recipes/?author={{userId}}",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"recipes",
										""
									],
									"query": [
										{
											"key": "author",
											"value": "{{userId}}"
										}
									]
								}
							},
							"response": []
						},
						{
							"name": "get_recipes_list_with_two_tags_param // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"required\": [\"count\", \"next\", \"previous\", \"results\"],",
											"    \"additionalProperties\": false,",
											"    \"properties\": {",
											"        \"count\": {\"type\": \"number\"},",
											"        \"next\": {\"type\": [\"string\", \"null\"]},",
											"        \"previous\": {\"type\": [\"string\", \"null\"]},",
											"        \"results\": {",
											"            \"type\": \"array\",",
											"            \"items\": {",
											"                \"type\": \"object\",",
											"                \"properties\":{",
											"                    \"id\": {\"type\": \"number\"},",
											"                    \"tags\": {",
											"                        \"type\": \"array\",",
											"                        \"items\": {",
											"                            \"type\": \"object\",",
											"                            \"properties\": {",
											"                                \"id\": {\"type\": \"number\"},",
											"                                \"name\": {\"type\": \"string\"},",
											"                                \"color\": {\"type\": \"string\"},",
											"                                \"slug\": {\"type\": \"string\"},",
											"                            },",
											"                            \"required\": [\"id\", \"name\", \"color\", \"slug\"],",
											"                            \"additionalProperties\": false",
											"                        }",
											"                    },",
											"                    \"author\": {",
											"                        \"type\": \"object\",",
											"                        \"properties\": {",
											"                            \"id\": {\"type\": \"number\"},",
											"                            \"username\": {\"type\": \"string\"},",
											"                            \"first_name\": {\"type\": \"string\"},",
											"                            \"last_name\": {\"type\": \"string\"},",
											"                            \"email\": {\"type\": \"string\"},",
											"                            \"is_subscribed\": {\"type\": \"boolean\"}",
											"                        },",
											"                        \"required\": [\"id\", \"username\", \"first_name\", \"last_name\", \"email\"],",
											"                        \"additionalProperties\": false",
											"                    },",
											"                    \"ingredients\": {",
											"                        \"type\": \"array\",",
											"                        \"items\": {",
											"                            \"type\": \"object\",",
											"                            \"properties\": {",
											"                                \"id\": {\"type\": \"number\"},",
											"                                \"name\": {\"type\": \"string\"},",
											"                                \"measurement_unit\": {\"type\": \"string\"},",
											"                                \"amount\": {\"type\": \"number\"}",
											"                            },",
											"                            \"required\": [\"id\", \"name\", \"measurement_unit\", \"amount\"],",
											"                            \"additionalProperties\": false",
											"                        }",
											"                    },",
											"                    \"is_favorited\": {\"type\": \"boolean\"},",
											"                    \"is_in_shopping_cart\": {\"type\": \"boolean\"},",
											"                    \"name\": {\"type\": \"string\"},",
											"                    \"image\": {\"type\": \"string\"},",
											"                    \"text\": {\"type\": \"string\"},",
											"                    \"cooking_time\": {\"type\": \"number\"}",
											"                },",
											"                \"required\": [",
											"                    \"id\", \"tags\", \"author\", \"ingredients\", \"is_favorited\", \"is_in_shopping_cart\",",
											"                    \"name\", \"image\", \"text\", \"cooking_time\"",
											"                ],",
											"                \"additionalProperties\": false",
											"            }",
											"        }",
											"        ",
											"    }",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос зарегистрированного пользователя должен вернуть ответ со статус-кодом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.expect(",
											"        pm.response,",
											"        \"Убедитесь, что для запрошенного эндпоинта корректно настроена пагинация\"",
											"    ).to.have.jsonSchema({\"type\": \"object\"});",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});",
											"pm.test(",
											"    \"Должна быть возможность фильтрации рецептов через параметр запроса `tags`\",",
											"    function () {",
											"        const responseData = pm.response.json();",
											"        const assert_msg = \"Убедитесь, что ответ на запрос содержит данные, удовлетворяющие условию поиска\"",
											"        pm.expect(responseData.length > 0, assert_msg);",
											"",
											"        let expectedTags = new Set();",
											"        const params = pm.request.url.query.all()",
											"        params.forEach(function (param, _, _) {",
											"            if (param.key === \"tags\") {",
											"                expectedTags.add(param.value);",
											"            }",
											"        });",
											"",
											"        let responseTags = new Set();",
											"        for (elem of responseData.results) {",
											"            var is_satisfied = false;",
											"            for (tag of elem.tags) {",
											"                if (expectedTags.has(tag.slug)) {",
											"                    is_satisfied = true;",
											"                    responseTags.add(tag.slug);",
											"                }",
											"            };",
											"            pm.expect(is_satisfied, assert_msg).to.be.true;",
											"        };",
											"",
											"        for (const elem of responseTags) {",
											"            if (expectedTags.has(elem)) {",
											"                expectedTags.delete(elem);",
											"            }",
											"        }",
											"        pm.expect(",
											"            expectedTags.size == 0,",
											"            \"Убедитесь, что в ответе содержатся рецепты, у которых есть хотя бы один из тегов, указанных в параметрах запроса\"",
											"        ).to.be.true;",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/recipes/?tags={{secondTagSlug}}&tags={{thirdTagSlug}}",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"recipes",
										""
									],
									"query": [
										{
											"key": "tags",
											"value": "{{secondTagSlug}}"
										},
										{
											"key": "tags",
											"value": "{{thirdTagSlug}}"
										}
									]
								}
							},
							"response": []
						},
						{
							"name": "get_recipe_detail // No Auth",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\":{",
											"        \"id\": {\"type\": \"number\"},",
											"        \"tags\": {",
											"            \"type\": \"array\",",
											"            \"items\": {",
											"                \"type\": \"object\",",
											"                \"properties\": {",
											"                    \"id\": {\"type\": \"number\"},",
											"                    \"name\": {\"type\": \"string\"},",
											"                    \"color\": {\"type\": \"string\"},",
											"                    \"slug\": {\"type\": \"string\"},",
											"                },",
											"                \"required\": [\"id\", \"name\", \"color\", \"slug\"],",
											"                \"additionalProperties\": false",
											"            }",
											"        },",
											"        \"author\": {",
											"            \"type\": \"object\",",
											"            \"properties\": {",
											"                \"id\": {\"type\": \"number\"},",
											"                \"username\": {\"type\": \"string\"},",
											"                \"first_name\": {\"type\": \"string\"},",
											"                \"last_name\": {\"type\": \"string\"},",
											"                \"email\": {\"type\": \"string\"},",
											"                \"is_subscribed\": {\"type\": \"boolean\"}",
											"            },",
											"            \"required\": [\"id\", \"username\", \"first_name\", \"last_name\", \"email\"],",
											"            \"additionalProperties\": false",
											"        },",
											"        \"ingredients\": {",
											"            \"type\": \"array\",",
											"            \"items\": {",
											"                \"type\": \"object\",",
											"                \"properties\": {",
											"                    \"id\": {\"type\": \"number\"},",
											"                    \"name\": {\"type\": \"string\"},",
											"                    \"measurement_unit\": {\"type\": \"string\"},",
											"                    \"amount\": {\"type\": \"number\"}",
											"                },",
											"                \"required\": [\"id\", \"name\", \"measurement_unit\", \"amount\"],",
											"                \"additionalProperties\": false",
											"            }",
											"        },",
											"        \"is_favorited\": {\"type\": \"boolean\"},",
											"        \"is_in_shopping_cart\": {\"type\": \"boolean\"},",
											"        \"name\": {\"type\": \"string\"},",
											"        \"image\": {\"type\": \"string\"},",
											"        \"text\": {\"type\": \"string\"},",
											"        \"cooking_time\": {\"type\": \"number\"}",
											"    },",
											"    \"required\": [",
											"        \"id\", \"tags\", \"author\", \"ingredients\", \"is_favorited\", \"is_in_shopping_cart\",",
											"        \"name\", \"image\", \"text\", \"cooking_time\"",
											"    ],",
											"    \"additionalProperties\": false",
											"}",
											"",
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос незарегистрированного пользователя должен вернуть ответ со статус-кодом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"protocolProfileBehavior": {
								"disableBodyPruning": true
							},
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "GET",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/recipes/{{firstRecipeId}}/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"recipes",
										"{{firstRecipeId}}",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "get_recipe_detail // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\":{",
											"        \"id\": {\"type\": \"number\"},",
											"        \"tags\": {",
											"            \"type\": \"array\",",
											"            \"items\": {",
											"                \"type\": \"object\",",
											"                \"properties\": {",
											"                    \"id\": {\"type\": \"number\"},",
											"                    \"name\": {\"type\": \"string\"},",
											"                    \"color\": {\"type\": \"string\"},",
											"                    \"slug\": {\"type\": \"string\"},",
											"                },",
											"                \"required\": [\"id\", \"name\", \"color\", \"slug\"],",
											"                \"additionalProperties\": false",
											"            }",
											"        },",
											"        \"author\": {",
											"            \"type\": \"object\",",
											"            \"properties\": {",
											"                \"id\": {\"type\": \"number\"},",
											"                \"username\": {\"type\": \"string\"},",
											"                \"first_name\": {\"type\": \"string\"},",
											"                \"last_name\": {\"type\": \"string\"},",
											"                \"email\": {\"type\": \"string\"},",
											"                \"is_subscribed\": {\"type\": \"boolean\"}",
											"            },",
											"            \"required\": [\"id\", \"username\", \"first_name\", \"last_name\", \"email\"],",
											"            \"additionalProperties\": false",
											"        },",
											"        \"ingredients\": {",
											"            \"type\": \"array\",",
											"            \"items\": {",
											"                \"type\": \"object\",",
											"                \"properties\": {",
											"                    \"id\": {\"type\": \"number\"},",
											"                    \"name\": {\"type\": \"string\"},",
											"                    \"measurement_unit\": {\"type\": \"string\"},",
											"                    \"amount\": {\"type\": \"number\"}",
											"                },",
											"                \"required\": [\"id\", \"name\", \"measurement_unit\", \"amount\"],",
											"                \"additionalProperties\": false",
											"            }",
											"        },",
											"        \"is_favorited\": {\"type\": \"boolean\"},",
											"        \"is_in_shopping_cart\": {\"type\": \"boolean\"},",
											"        \"name\": {\"type\": \"string\"},",
											"        \"image\": {\"type\": \"string\"},",
											"        \"text\": {\"type\": \"string\"},",
											"        \"cooking_time\": {\"type\": \"number\"}",
											"    },",
											"    \"required\": [",
											"        \"id\", \"tags\", \"author\", \"ingredients\", \"is_favorited\", \"is_in_shopping_cart\",",
											"        \"name\", \"image\", \"text\", \"cooking_time\"",
											"    ],",
											"    \"additionalProperties\": false",
											"}",
											"",
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос зарегистрированного пользователя должен вернуть ответ со статус-кодом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"protocolProfileBehavior": {
								"disableBodyPruning": true
							},
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "GET",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/recipes/{{firstRecipeId}}/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"recipes",
										"{{firstRecipeId}}",
										""
									]
								}
							},
							"response": []
						}
					]
				},
				{
					"name": "update_recipes",
					"item": [
						{
							"name": "update_recipe // Second User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\":{",
											"        \"id\": {\"type\": \"number\"},",
											"        \"tags\": {",
											"            \"type\": \"array\",",
											"            \"items\": {",
											"                \"type\": \"object\",",
											"                \"properties\": {",
											"                    \"id\": {\"type\": \"number\"},",
											"                    \"name\": {\"type\": \"string\"},",
											"                    \"color\": {\"type\": \"string\"},",
											"                    \"slug\": {\"type\": \"string\"},",
											"                },",
											"                \"required\": [\"id\", \"name\", \"color\", \"slug\"],",
											"                \"additionalProperties\": false",
											"            }",
											"        },",
											"        \"author\": {",
											"            \"type\": \"object\",",
											"            \"properties\": {",
											"                \"id\": {\"type\": \"number\"},",
											"                \"username\": {\"type\": \"string\"},",
											"                \"first_name\": {\"type\": \"string\"},",
											"                \"last_name\": {\"type\": \"string\"},",
											"                \"email\": {\"type\": \"string\"},",
											"                \"is_subscribed\": {\"type\": \"boolean\"}",
											"            },",
											"            \"required\": [\"id\", \"username\", \"first_name\", \"last_name\", \"email\"],",
											"            \"additionalProperties\": false",
											"        },",
											"        \"ingredients\": {",
											"            \"type\": \"array\",",
											"            \"items\": {",
											"                \"type\": \"object\",",
											"                \"properties\": {",
											"                    \"id\": {\"type\": \"number\"},",
											"                    \"name\": {\"type\": \"string\"},",
											"                    \"measurement_unit\": {\"type\": \"string\"},",
											"                    \"amount\": {\"type\": \"number\"}",
											"                },",
											"                \"required\": [\"id\", \"name\", \"measurement_unit\", \"amount\"],",
											"                \"additionalProperties\": false",
											"            }",
											"        },",
											"        \"is_favorited\": {\"type\": \"boolean\"},",
											"        \"is_in_shopping_cart\": {\"type\": \"boolean\"},",
											"        \"name\": {\"type\": \"string\"},",
											"        \"image\": {\"type\": \"string\"},",
											"        \"text\": {\"type\": \"string\"},",
											"        \"cooking_time\": {\"type\": \"number\"}",
											"    },",
											"    \"required\": [",
											"        \"id\", \"tags\", \"author\", \"ingredients\", \"is_favorited\", \"is_in_shopping_cart\",",
											"        \"name\", \"image\", \"text\", \"cooking_time\"",
											"    ],",
											"    \"additionalProperties\": false",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос на редактирование рецепта, содержащий  корректные данные и отправленный зарегистрированным пользователем, должен вернуть ответ со статус-кодом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											"pm.test('Структура ответа соответствует ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{secondUserToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "PATCH",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": 25\n    }\n  ],\n  \"tags\": [\n    {{secondTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"Нечто съедобное (пробовать на свой страх и риск)\",\n  \"text\": \"Приготовьте как нибудь эти ингредиеты, не забудьте посолить.\",\n  \"cooking_time\": 12\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/recipes/{{firstRecipeId}}/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"recipes",
										"{{firstRecipeId}}",
										""
									]
								}
							},
							"response": []
						}
					]
				},
				{
					"name": "recipes_bad_requests",
					"item": [
						{
							"name": "create_recipe_bad_requests",
							"item": [
								{
									"name": "create_recipe_without_ingredients // User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если в запросе на создание рецепта отсутствует поле `ingredients` - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{userToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "POST",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"tags\": [\n    {{firstTagId}},\n    {{secondTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"Рецепт без ингредиентов\",\n  \"text\": \"Не знаю как такое готовить\",\n  \"cooking_time\": 90\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "create_recipe_empty_ingredients_fields // User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если запрос на создание рецепта содержит пустое поле `ingredients` - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{userToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "POST",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [],\n  \"tags\": [\n    {{firstTagId}},\n    {{secondTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"Неправильный рецепт\",\n  \"text\": \"А ингредиенты я не скажу!\",\n  \"cooking_time\": 15\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "create_recipe_with_non_existing_ingredient // User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если в запросе на создание рецепта указан несуществующий ингредиент - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{userToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "POST",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n  {\n    \"id\": 99999,\n    \"amount\": 25\n  }\n  ],\n  \"tags\": [\n    {{firstTagId}},\n    {{secondTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"Рецепт с несуществующим ингредиентом\",\n  \"text\": \"Админ, добавь ингредиент!\",\n  \"cooking_time\": 15\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "create_recipe_with_ingredient_amount_less_than_one // User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если в запросе на создание рецепта указано количество ингредиента меньше 1 - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{userToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "POST",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n  {\n      \"id\": {{firstIndredientId}},\n      \"amount\": 0\n  }\n  ],\n  \"tags\": [\n    {{firstTagId}},\n    {{secondTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"Некорректное количество ингредиента\",\n  \"text\": \"Возьмите ноль ингредиента...\",\n  \"cooking_time\": 15\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "create_recipe_with_repetitive_ingredients // User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если запрос на создание рецепта содержит повторяющиеся ингредиенты - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{userToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "POST",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n        \"id\": {{firstIndredientId}},\n        \"amount\": 10\n    },\n    {\n        \"id\": {{firstIndredientId}},\n        \"amount\": 10\n    }\n  ],\n  \"tags\": [\n    {{firstTagId}},\n    {{secondTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"Повторяющиеся ингредиенты\",\n  \"text\": \"Двойная порция\",\n  \"cooking_time\": 15\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "create_recipe_without_tags_field // User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если в запросе на создание рецепта отсутствует поле `tags` - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{userToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "POST",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": {{firstIngredientAmount}}\n    },\n    {\n      \"id\": {{secondIndredientId}},\n      \"amount\": {{secondIngredientAmount}}\n    }\n  ],\n  \"image\": \"\",\n  \"name\": \"Дичь (возможно, летающая)\",\n  \"text\": \"Сперва поймайте, потом готовьте\",\n  \"cooking_time\": 5\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "create_recipe_empty_tags // User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если запрос на создание рецепта содержит пустое поле `tags` - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{userToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "POST",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": {{firstIngredientAmount}}\n    },\n    {\n      \"id\": {{secondIndredientId}},\n      \"amount\": {{secondIngredientAmount}}\n    }\n  ],\n  \"tags\": [],\n  \"image\": \"\",\n  \"name\": \"Попробуй съесть\",\n  \"text\": \"Но будь аккуратен\",\n  \"cooking_time\": 5\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "create_recipe_with_repetitive_tags // User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если в запросе на создание рецепта содержит повторяющиеся теги - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{userToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "POST",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": {{firstIngredientAmount}}\n    }\n  ],\n  \"tags\": [\n    {{firstTagId}},\n    {{firstTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"Повторяющиеся теги\",\n  \"text\": \"Проверка валидации\",\n  \"cooking_time\": 5\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "create_recipe_with_non_existing_tag // User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если в запросе на создание рецепта указан несуществующий тег - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{userToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "POST",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": {{firstIngredientAmount}}\n    },\n    {\n      \"id\": {{secondIndredientId}},\n      \"amount\": {{secondIngredientAmount}}\n    }\n  ],\n  \"tags\": [\n      9876\n  ],\n  \"image\": \"\",\n  \"name\": \"Рецепт с несуществующим тегом\",\n  \"text\": \"Тега нет, а хотелось бы\",\n  \"cooking_time\": 5\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "create_recipe_without_image_field // User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если в запросе на создание рецепта отсутствует поле `image` - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{userToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "POST",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": {{firstIngredientAmount}}\n    }\n  ],\n  \"tags\": [\n    {{firstTagId}}\n  ],\n  \"name\": \"Надеюсь, это еда\",\n  \"text\": \"Съесть сырым\",\n  \"cooking_time\": 5\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "create_recipe_empty_image // User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если в запросе на создание рецепта содержится пустое поле `image` - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{userToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "POST",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": {{firstIngredientAmount}}\n    }\n  ],\n  \"tags\": [\n    {{firstTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"А фотку я не покажу\",\n  \"text\": \"Приготовить любым способом\",\n  \"cooking_time\": 5\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "create_recipe_without_name_field // User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если в запросе на создание рецепта отсутствует поле `name` - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{userToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "POST",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": {{firstIngredientAmount}}\n    }\n  ],\n  \"tags\": [\n    {{firstTagId}}\n  ],\n  \"image\": \"\",\n  \"text\": \"Безымянный рецепт\",\n  \"cooking_time\": 5\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "create_recipe_empty_name // User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если в запросе на создание рецепта содержится пустое поле `name` - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{userToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "POST",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": {{firstIngredientAmount}}\n    }\n  ],\n  \"tags\": [\n    {{firstTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"\",\n  \"text\": \"Название не укажу\",\n  \"cooking_time\": 5\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "create_recipe_too_long_name // User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если длина поля `name` превышает 200 символов - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{userToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "POST",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": {{firstIngredientAmount}}\n    }\n  ],\n  \"tags\": [\n    {{firstTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"{{tooLongName}}\",\n  \"text\": \"Рецепт с очень длинным названием\",\n  \"cooking_time\": 5\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "create_recipe_without_text_field // User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если в запросе на создание рецепта отсутствует поле `text` - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{userToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "POST",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": {{firstIngredientAmount}}\n    }\n  ],\n  \"tags\": [\n    {{firstTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"Некая еда\",\n  \"cooking_time\": 5\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "create_recipe_empty_text // User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если в запросе на создание рецепта содержится пустое поле `text` - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{userToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "POST",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": {{firstIngredientAmount}}\n    }\n  ],\n  \"tags\": [\n    {{firstTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"Неописуемый рецепт\",\n  \"text\": \"\",\n  \"cooking_time\": 5\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "create_recipe_without_cooking_time_field // User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если в запросе на создание рецепта отсутствует поле `cooking_time` - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{userToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "POST",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": {{firstIngredientAmount}}\n    }\n  ],\n  \"tags\": [\n    {{firstTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"Не ограниченный по времени рецепт\",\n  \"text\": \"Готовить от 1 минуты до бесконечности\"\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "create_recipe_empty_string_as_cooking_time // User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если в запросе на создание рецепта поле `cooking_time` содержит пустую строку - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{userToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "POST",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": {{firstIngredientAmount}}\n    }\n  ],\n  \"tags\": [\n    {{firstTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"Сколько готовить - не помню\",\n  \"text\": \"Готовить до готовности\",\n  \"cooking_time\": \"\"\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "create_recipe_cooking_time_less_than_one // User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если в запросе на создание рецепта в поле `cooking_time` содержится значение меньше единицы - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{userToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "POST",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": {{firstIngredientAmount}}\n    }\n  ],\n  \"tags\": [\n    {{firstTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"Очень быстрый рецепт\",\n  \"text\": \"Можно не готовить\",\n  \"cooking_time\": 0\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "create_recipe // No Auth",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 401\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Запрос незарегистрированного пользователя на создание рецепта должен вернуть ответ со статусом 401\"",
													"    ).to.be.eql(\"Unauthorized\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "noauth"
										},
										"method": "POST",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": {{firstIngredientAmount}}\n    },\n    {\n      \"id\": {{secondIndredientId}},\n      \"amount\": {{secondIngredientAmount}}\n    }\n  ],\n  \"tags\": [\n    {{firstTagId}},\n    {{secondTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"Рецепт неавторизованного пользователя\",\n  \"text\": \"Рецепт неавторизованного пользователя\",\n  \"cooking_time\": 5\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												""
											]
										}
									},
									"response": []
								}
							]
						},
						{
							"name": "update_recipe_bad_requests",
							"item": [
								{
									"name": "update_recipe_not_author // User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 403\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Запрос пользователя на обновление чужого рецепта должен вернуть ответ со статусом 403\"",
													"    ).to.be.eql(\"Forbidden\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{userToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "PATCH",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": 25\n    }\n  ],\n  \"tags\": [\n    {{secondTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"Обновление чужого рецепта\",\n  \"text\": \"Проверка прав доступа.\",\n  \"cooking_time\": 12\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/{{secondRecipeId}}/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												"{{secondRecipeId}}",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "update_recipe // No Auth",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 401\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Запрос незарегистрированного пользователя на обновление рецепта должен вернуть ответ со статусом 401\"",
													"    ).to.be.eql(\"Unauthorized\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "noauth"
										},
										"method": "PATCH",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": 25\n    }\n  ],\n  \"tags\": [\n    {{secondTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"Обновление рецепта\",\n  \"text\": \"Проверка прав доступа.\",\n  \"cooking_time\": 12\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/{{secondRecipeId}}/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												"{{secondRecipeId}}",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "update_recipe_without_ingredients_field // Second User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Запрос автора на обновление рецепта без поля `ingredients` - должен вернуть ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{secondUserToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "PATCH",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"tags\": [\n    {{secondTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"Нет поля с ингредиентами\",\n  \"text\": \"Ингредиенты не указаны\",\n  \"cooking_time\": 12\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/{{secondRecipeId}}/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												"{{secondRecipeId}}",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "update_recipe_empty_ingredients // Second User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Запрос автора на обновление рецепта с пустым полем `ingredients` - должен вернуть ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{secondUserToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "PATCH",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [],\n  \"tags\": [\n    {{secondTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"Пустое поле ингредиентов\",\n  \"text\": \"Ингредиенты не указаны\",\n  \"cooking_time\": 12\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/{{secondRecipeId}}/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												"{{secondRecipeId}}",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "update_recipe_with_non_existing_ingredient // Second User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если в запросе автора на обновление рецепта указан несуществующий ингредиент - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{secondUserToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "PATCH",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n        \"id\": 99999,\n        \"amount\": 20\n    }\n  ],\n  \"tags\": [\n    {{secondTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"Пустое поле ингредиентов\",\n  \"text\": \"Ингредиенты не указаны\",\n  \"cooking_time\": 12\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/{{secondRecipeId}}/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												"{{secondRecipeId}}",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "update_recipe_with_ingredient_amount_less_than_one // Second User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если в запросе автора на обновление рецепта количество ингредиентов меньше 1 - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});",
													""
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{secondUserToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "PATCH",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n  {\n      \"id\": {{firstIndredientId}},\n      \"amount\": 0\n  }\n  ],\n  \"tags\": [\n    {{firstTagId}},\n    {{secondTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"Рецепт с некорректным количеством ингридиента\",\n  \"text\": \"Проверка валидации количества ингредиента\",\n  \"cooking_time\": 15\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/{{secondRecipeId}}/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												"{{secondRecipeId}}",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "update_recipe_with_repetitive_ingredients // Second User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если запрос автора на обновление рецепта содержит повторяющиеся ингредиенты - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{secondUserToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "PATCH",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n        \"id\": {{firstIndredientId}},\n        \"amount\": 10\n    },\n    {\n        \"id\": {{firstIndredientId}},\n        \"amount\": 10\n    }\n  ],\n  \"tags\": [\n    {{firstTagId}},\n    {{secondTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"Повторяющиеся ингредиенты (обновление)\",\n  \"text\": \"Двойная порция\",\n  \"cooking_time\": 15\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/{{secondRecipeId}}/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												"{{secondRecipeId}}",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "update_recipe_without_tags_field // Second User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если в запросе автора на обновление рецепта нет поля `tags` - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{secondUserToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "PATCH",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": 25\n    }\n  ],\n  \"image\": \"\",\n  \"name\": \"Нет поля с тегами\",\n  \"text\": \"Теги не указаны\",\n  \"cooking_time\": 12\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/{{secondRecipeId}}/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												"{{secondRecipeId}}",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "update_recipe_empty_tags // Second User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если в запросе автора на обновление рецепта передано пустое поле `tags` - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{secondUserToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "PATCH",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": 25\n    }\n  ],\n  \"tags\": [],\n  \"image\": \"\",\n  \"name\": \"Пустое поле с тегами\",\n  \"text\": \"Теги не указаны\",\n  \"cooking_time\": 12\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/{{secondRecipeId}}/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												"{{secondRecipeId}}",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "update_recipe_with_non_existing_tag // Second User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если в запросе автора на обновление рецепта указан несуществующий тег - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{secondUserToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "PATCH",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": 25\n    }\n  ],\n  \"tags\": [\n      9876\n  ],\n  \"image\": \"\",\n  \"name\": \"Несуществующий тег\",\n  \"text\": \"Несуществующие тег\",\n  \"cooking_time\": 12\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/{{secondRecipeId}}/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												"{{secondRecipeId}}",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "update_recipe_repetitive_tags  // Second User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если запрос автора на обновление рецепта содержит повторяющиеся теги - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{secondUserToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "PATCH",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": {{firstIngredientAmount}}\n    }\n  ],\n  \"tags\": [\n    {{firstTagId}},\n    {{firstTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"Повторяющиеся теги (обновление)\",\n  \"text\": \"Проверка валидации\",\n  \"cooking_time\": 5\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/{{secondRecipeId}}/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												"{{secondRecipeId}}",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "update_recipe_empty_image  // Second User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если в запросе автора на обновление рецепта содержится пустое поле `image` - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{secondUserToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "PATCH",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": {{firstIngredientAmount}}\n    }\n  ],\n  \"tags\": [\n    {{firstTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"Рецепт без картинки\",\n  \"text\": \"Картина не приложена\",\n  \"cooking_time\": 5\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/{{secondRecipeId}}/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												"{{secondRecipeId}}",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "update_recipe_empty_name  // Second User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если в запросе автора на обновление рецепта содержится пустое поле `name` - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{secondUserToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "PATCH",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": {{firstIngredientAmount}}\n    }\n  ],\n  \"tags\": [\n    {{firstTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"\",\n  \"text\": \"Без названия\",\n  \"cooking_time\": 5\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/{{secondRecipeId}}/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												"{{secondRecipeId}}",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "update_recipe_too_long_name  // Second User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если длина поля `name` превышает 200 символов - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{secondUserToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "PATCH",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": {{firstIngredientAmount}}\n    }\n  ],\n  \"tags\": [\n    {{firstTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"{{tooLongName}}\",\n  \"text\": \"Рецепт с очень длинным названием\",\n  \"cooking_time\": 5\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/{{secondRecipeId}}/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												"{{secondRecipeId}}",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "update_recipe_empty_text  // Second User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если в запросе автора на обновление рецепта содержится пустое поле `text` - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{secondUserToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "PATCH",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": {{firstIngredientAmount}}\n    }\n  ],\n  \"tags\": [\n    {{firstTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"Без описания\",\n  \"text\": \"\",\n  \"cooking_time\": 5\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/{{secondRecipeId}}/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												"{{secondRecipeId}}",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "update_recipe_empty_string_as_cooking_time  // Second User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если в запросе на создание рецепта поле `cooking_time` содержит пустую строку - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{secondUserToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "PATCH",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": {{firstIngredientAmount}}\n    }\n  ],\n  \"tags\": [\n    {{firstTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"Некорректное время готовки (пустая строка)\",\n  \"text\": \"Некорректное время готовки\",\n  \"cooking_time\": \"\"\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/{{secondRecipeId}}/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												"{{secondRecipeId}}",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "update_recipe_empty_cooking_time_less_than_one  // Second User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Если в запросе автора на обновление рецепта поле `cooking_time` содержит значение меньше единицы - должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{secondUserToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "PATCH",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": {{firstIngredientAmount}}\n    }\n  ],\n  \"tags\": [\n    {{firstTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"Некорректное время готовки\",\n  \"text\": \"Некорректное время готовки\",\n  \"cooking_time\": 0\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/{{secondRecipeId}}/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												"{{secondRecipeId}}",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "update_none_existing_recipe // Second User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 404\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Запрос пользователя на обновление несуществующего рецепта должен вернуть ответ со статусом 404\"",
													"    ).to.be.eql(\"Not Found\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{secondUserToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "PATCH",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": {{firstIndredientId}},\n      \"amount\": 25\n    }\n  ],\n  \"tags\": [\n    {{secondTagId}}\n  ],\n  \"image\": \"\",\n  \"name\": \"Обновление рецепта\",\n  \"text\": \"Проверка прав доступа.\",\n  \"cooking_time\": 12\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/9876/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												"9876",
												""
											]
										}
									},
									"response": []
								}
							]
						}
					]
				}
			],
			"auth": {
				"type": "noauth"
			},
			"event": [
				{
					"listen": "prerequest",
					"script": {
						"type": "text/javascript",
						"exec": [
							""
						]
					}
				},
				{
					"listen": "test",
					"script": {
						"type": "text/javascript",
						"exec": [
							""
						]
					}
				}
			]
		},
		{
			"name": "subscriptions",
			"item": [
				{
					"name": "create_subscriptions",
					"item": [
						{
							"name": "create_subscription // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\": {",
											"        \"id\": {\"type\": \"number\"},",
											"        \"username\": {\"type\": \"string\"},",
											"        \"first_name\": {\"type\": \"string\"},",
											"        \"last_name\": {\"type\": \"string\"},",
											"        \"email\": {\"type\": \"string\"},",
											"        \"is_subscribed\": {\"type\": \"boolean\"},",
											"        \"recipes_count\": {\"type\": \"number\"},",
											"        \"recipes\": {",
											"            \"type\": \"array\",",
											"            \"items\": {",
											"                \"type\": \"object\",",
											"                \"properties\": {",
											"                    \"id\": {\"type\": \"number\"},",
											"                    \"name\": {\"type\": \"string\"},",
											"                    \"image\": {\"type\": \"string\"},",
											"                    \"cooking_time\": {\"type\": \"number\"}",
											"                },",
											"                \"required\": [\"id\", \"name\", \"image\", \"cooking_time\"],",
											"                \"additionalProperties\": false",
											"            }",
											"        }",
											"    },",
											"    \"required\": [",
											"        \"id\", \"username\", \"first_name\", \"last_name\", \"email\",",
											"        \"is_subscribed\", \"recipes\", \"recipes_count\"",
											"    ],",
											"    \"additionalProperties\": false",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 201\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос зарегистрированного пользователя на создание подписки должен вернуть ответ со статус-кодом 201\"",
											"    ).to.be.eql(\"Created\");",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/users/{{thirdUserId}}/subscribe/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										"{{thirdUserId}}",
										"subscribe",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "create_subscription_with_recipes_limit_param // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\": {",
											"        \"id\": {\"type\": \"number\"},",
											"        \"username\": {\"type\": \"string\"},",
											"        \"first_name\": {\"type\": \"string\"},",
											"        \"last_name\": {\"type\": \"string\"},",
											"        \"email\": {\"type\": \"string\"},",
											"        \"is_subscribed\": {\"type\": \"boolean\"},",
											"        \"recipes_count\": {\"type\": \"number\"},",
											"        \"recipes\": {",
											"            \"type\": \"array\",",
											"            \"items\": {",
											"                \"type\": \"object\",",
											"                \"properties\": {",
											"                    \"id\": {\"type\": \"number\"},",
											"                    \"name\": {\"type\": \"string\"},",
											"                    \"image\": {\"type\": \"string\"},",
											"                    \"cooking_time\": {\"type\": \"number\"}",
											"                },",
											"                \"required\": [\"id\", \"name\", \"image\", \"cooking_time\"],",
											"                \"additionalProperties\": false",
											"            }",
											"        }",
											"    },",
											"    \"required\": [",
											"        \"id\", \"username\", \"first_name\", \"last_name\", \"email\",",
											"        \"is_subscribed\", \"recipes\", \"recipes_count\"",
											"    ],",
											"    \"additionalProperties\": false",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 201\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос зарегистрированного пользователя на создание подписки должен вернуть ответ со статус-кодом 201\"",
											"    ).to.be.eql(\"Created\");",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});",
											"pm.test(",
											"    \"Должна быть возможность изменить количество выводимых рецептов в данных пользователя через параметр `recipes_limit`\",",
											"    function () {",
											"        const recipes_limit = Number(pm.request.url.query.get(\"recipes_limit\"));",
											"        const responseData = pm.response.json();",
											"        pm.expect(",
											"            responseData.recipes.length,",
											"            \"Убедитесь, что с помощью параметра запроса `recipes_limit` можно изменять количество отображаемых рецептов в данных пользователей, на которых оформлена подписка\"    ",
											"        ).to.be.lte(recipes_limit)",
											"    }",
											");"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/users/{{secondUserId}}/subscribe/?recipes_limit=2",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										"{{secondUserId}}",
										"subscribe",
										""
									],
									"query": [
										{
											"key": "recipes_limit",
											"value": "2"
										}
									]
								}
							},
							"response": []
						}
					]
				},
				{
					"name": "get_subscriptions",
					"item": [
						{
							"name": "get_subscription_list // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\":{",
											"        \"count\": {\"type\": \"number\"},",
											"        \"next\": {\"type\": [\"string\", \"null\"]},",
											"        \"previous\": {\"type\": [\"string\", \"null\"]},",
											"        \"results\": {",
											"            \"type\": \"array\",",
											"            \"items\": {",
											"                \"type\": \"object\",",
											"                \"properties\": {",
											"                    \"id\": {\"type\": \"number\"},",
											"                    \"username\": {\"type\": \"string\"},",
											"                    \"first_name\": {\"type\": \"string\"},",
											"                    \"last_name\": {\"type\": \"string\"},",
											"                    \"email\": {\"type\": \"string\"},",
											"                    \"is_subscribed\": {\"type\": \"boolean\"},",
											"                    \"recipes_count\": {\"type\": \"number\"},",
											"                    \"recipes\": {",
											"                        \"type\": \"array\",",
											"                        \"items\": {",
											"                            \"type\": \"object\",",
											"                            \"properties\": {",
											"                                \"id\": {\"type\": \"number\"},",
											"                                \"name\": {\"type\": \"string\"},",
											"                                \"image\": {\"type\": \"string\"},",
											"                                \"cooking_time\": {\"type\": \"number\"}",
											"                            },",
											"                            \"required\": [\"id\", \"name\", \"image\", \"cooking_time\"],",
											"                            \"additionalProperties\": false",
											"                        }",
											"                    }",
											"                },",
											"                \"required\": [",
											"                    \"id\", \"username\", \"first_name\", \"last_name\", \"email\",",
											"                    \"is_subscribed\", \"recipes\", \"recipes_count\"",
											"                ],",
											"                \"additionalProperties\": false",
											"            }",
											"        }",
											"    },",
											"    \"required\": [\"count\", \"next\", \"previous\", \"results\"],",
											"    \"additionalProperties\": false",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос зарегистрированного пользователя на получение перечня подписок должен вернуть ответ со статус-кодом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.expect(",
											"        pm.response,",
											"        \"Убедитесь, что для запрошенного эндпоинта корректно настроена пагинация\"",
											"    ).to.have.jsonSchema({\"type\": \"object\"});",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/users/subscriptions/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										"subscriptions",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "get_subscription_list_with_limit_param // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\":{",
											"        \"count\": {\"type\": \"number\"},",
											"        \"next\": {\"type\": [\"string\", \"null\"]},",
											"        \"previous\": {\"type\": [\"string\", \"null\"]},",
											"        \"results\": {",
											"            \"type\": \"array\",",
											"            \"items\": {",
											"                \"type\": \"object\",",
											"                \"properties\": {",
											"                    \"id\": {\"type\": \"number\"},",
											"                    \"username\": {\"type\": \"string\"},",
											"                    \"first_name\": {\"type\": \"string\"},",
											"                    \"last_name\": {\"type\": \"string\"},",
											"                    \"email\": {\"type\": \"string\"},",
											"                    \"is_subscribed\": {\"type\": \"boolean\"},",
											"                    \"recipes_count\": {\"type\": \"number\"},",
											"                    \"recipes\": {",
											"                        \"type\": \"array\",",
											"                        \"items\": {",
											"                            \"type\": \"object\",",
											"                            \"properties\": {",
											"                                \"id\": {\"type\": \"number\"},",
											"                                \"name\": {\"type\": \"string\"},",
											"                                \"image\": {\"type\": \"string\"},",
											"                                \"cooking_time\": {\"type\": \"number\"}",
											"                            },",
											"                            \"required\": [\"id\", \"name\", \"image\", \"cooking_time\"],",
											"                            \"additionalProperties\": false",
											"                        }",
											"                    }",
											"                },",
											"                \"required\": [",
											"                    \"id\", \"username\", \"first_name\", \"last_name\", \"email\",",
											"                    \"is_subscribed\", \"recipes\", \"recipes_count\"",
											"                ],",
											"                \"additionalProperties\": false",
											"            }",
											"        }",
											"    },",
											"    \"required\": [\"count\", \"next\", \"previous\", \"results\"],",
											"    \"additionalProperties\": false",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос зарегистрированного пользователя на получение перечня подписок должен вернуть ответ со статус-кодом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.expect(",
											"        pm.response,",
											"        \"Убедитесь, что для запрошенного эндпоинта корректно настроена пагинация\"",
											"    ).to.have.jsonSchema({\"type\": \"object\"});",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});",
											"pm.test(",
											"    \"Должна быть возможность изменить количество объектов на странице через параметр запроса `limit`\",",
											"    function () {",
											"        const limit = Number(pm.request.url.query.get(\"limit\"));",
											"        const responseData = pm.response.json();",
											"        pm.expect(",
											"            responseData.results.length,",
											"            \"Убедитесь, что с помощью параметра запроса `limit` можно изменять количество объектов на странице пагинатора\"    ",
											"        ).to.be.eql(limit)",
											"    }",
											");"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/users/subscriptions/?limit=1",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										"subscriptions",
										""
									],
									"query": [
										{
											"key": "limit",
											"value": "1"
										}
									]
								}
							},
							"response": []
						},
						{
							"name": "get_subscription_list_with_recipes_limit_param // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\":{",
											"        \"count\": {\"type\": \"number\"},",
											"        \"next\": {\"type\": [\"string\", \"null\"]},",
											"        \"previous\": {\"type\": [\"string\", \"null\"]},",
											"        \"results\": {",
											"            \"type\": \"array\",",
											"            \"items\": {",
											"                \"type\": \"object\",",
											"                \"properties\": {",
											"                    \"id\": {\"type\": \"number\"},",
											"                    \"username\": {\"type\": \"string\"},",
											"                    \"first_name\": {\"type\": \"string\"},",
											"                    \"last_name\": {\"type\": \"string\"},",
											"                    \"email\": {\"type\": \"string\"},",
											"                    \"is_subscribed\": {\"type\": \"boolean\"},",
											"                    \"recipes_count\": {\"type\": \"number\"},",
											"                    \"recipes\": {",
											"                        \"type\": \"array\",",
											"                        \"items\": {",
											"                            \"type\": \"object\",",
											"                            \"properties\": {",
											"                                \"id\": {\"type\": \"number\"},",
											"                                \"name\": {\"type\": \"string\"},",
											"                                \"image\": {\"type\": \"string\"},",
											"                                \"cooking_time\": {\"type\": \"number\"}",
											"                            },",
											"                            \"required\": [\"id\", \"name\", \"image\", \"cooking_time\"],",
											"                            \"additionalProperties\": false",
											"                        }",
											"                    }",
											"                },",
											"                \"required\": [",
											"                    \"id\", \"username\", \"first_name\", \"last_name\", \"email\",",
											"                    \"is_subscribed\", \"recipes\", \"recipes_count\"",
											"                ],",
											"                \"additionalProperties\": false",
											"            }",
											"        }",
											"    },",
											"    \"required\": [\"count\", \"next\", \"previous\", \"results\"],",
											"    \"additionalProperties\": false",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос зарегистрированного пользователя на получение перечня подписок должен вернуть ответ со статус-кодом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.expect(",
											"        pm.response,",
											"        \"Убедитесь, что для запрошенного эндпоинта корректно настроена пагинация\"",
											"    ).to.have.jsonSchema({\"type\": \"object\"});",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});",
											"pm.test(",
											"    \"Убедитесь, что количество выводимых рецептов в данных пользователя можно изменить через параметр `recipes_limit`\",",
											"    function () {",
											"        const recipes_limit = Number(pm.request.url.query.get(\"recipes_limit\"));",
											"        const responseData = pm.response.json();",
											"        for (elem of responseData.results) {",
											"            pm.expect(",
											"                elem.recipes.length,",
											"                \"Убедитесь, что с помощью параметра запроса `recipes_limit` можно изменять количество отображаемых рецептов в данных пользователей, на которых оформлена подписка\"    ",
											"            ).to.be.lte(recipes_limit)",
											"        };",
											"    }",
											");"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/users/subscriptions/?recipes_limit=2",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										"subscriptions",
										""
									],
									"query": [
										{
											"key": "recipes_limit",
											"value": "2"
										}
									]
								}
							},
							"response": []
						}
					]
				},
				{
					"name": "subscription_bad_requests",
					"item": [
						{
							"name": "create_subscription // No Auth",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 401\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос незарегистрированного пользователя на создание подписки должен вернуть ответ со статусом 401\"",
											"    ).to.be.eql(\"Unauthorized\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/users/{{thirdUserId}}/subscribe/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										"{{thirdUserId}}",
										"subscribe",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "create_duplicated_subscription // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 400\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"При попытке создания дублирующейся подписки должен вернуться ответ со статусом 400\"",
											"    ).to.be.eql(\"Bad Request\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/users/{{thirdUserId}}/subscribe/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										"{{thirdUserId}}",
										"subscribe",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "create_self_subscription // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 400\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"При попытке создания подписки на самого себя должен вернуться ответ со статусом 400\"",
											"    ).to.be.eql(\"Bad Request\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/users/{{userId}}/subscribe/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										"{{userId}}",
										"subscribe",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "create_subscription_to_non_existing_author // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 404\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"При попытке создания подписки на несуществующего автора должен вернуться ответ со статусом 404\"",
											"    ).to.be.eql(\"Not Found\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/users/9876/subscribe/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										"9876",
										"subscribe",
										""
									]
								}
							},
							"response": []
						}
					]
				}
			],
			"auth": {
				"type": "apikey",
				"apikey": [
					{
						"key": "value",
						"value": "Token {{userToken}}",
						"type": "string"
					},
					{
						"key": "key",
						"value": "Authorization",
						"type": "string"
					}
				]
			},
			"event": [
				{
					"listen": "prerequest",
					"script": {
						"type": "text/javascript",
						"exec": [
							""
						]
					}
				},
				{
					"listen": "test",
					"script": {
						"type": "text/javascript",
						"exec": [
							""
						]
					}
				}
			]
		},
		{
			"name": "shopping_cart",
			"item": [
				{
					"name": "add_to_shopping_cart",
					"item": [
						{
							"name": "add_to_shopping_cart // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\": {",
											"        \"id\": {\"type\": \"number\"},",
											"        \"name\": {\"type\": \"string\"},",
											"        \"image\": {\"type\": \"string\"},",
											"        \"cooking_time\": {\"type\": \"number\"}",
											"    },",
											"    \"required\": [\"id\", \"name\", \"image\", \"cooking_time\"],",
											"    \"additionalProperties\": false",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 201\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос зарегистрированного пользователя на добавление рецепта в корзину должен вернуть ответ со статус-кодом 201\"",
											"    ).to.be.eql(\"Created\");",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/recipes/{{firstRecipeId}}/shopping_cart/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"recipes",
										"{{firstRecipeId}}",
										"shopping_cart",
										""
									]
								}
							},
							"response": []
						}
					]
				},
				{
					"name": "download_shopping_cart",
					"item": [
						{
							"name": "download_shopping_cart // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 200\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос зарегистрированного пользователя на скачивание списка покупок должен вернуть ответ со статус-кодом 200\"",
											"    ).to.be.eql(\"OK\");",
											"});",
											""
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/recipes/download_shopping_cart/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"recipes",
										"download_shopping_cart",
										""
									]
								}
							},
							"response": []
						}
					]
				},
				{
					"name": "shopping_cart_bad_requests",
					"item": [
						{
							"name": "add_to_shopping_cart // No Auth",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 401\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос неавторизованного пользователя не добавление рецепта в корзину должен вернуть ответ со статусом 401\"",
											"    ).to.be.eql(\"Unauthorized\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/recipes/{{firstRecipeId}}/shopping_cart/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"recipes",
										"{{firstRecipeId}}",
										"shopping_cart",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "add_again_to_shopping_cart // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 400\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"При попытке повторно добавить рецепт в корзину должен вернуться ответ со статусом 400\"",
											"    ).to.be.eql(\"Bad Request\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/recipes/{{firstRecipeId}}/shopping_cart/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"recipes",
										"{{firstRecipeId}}",
										"shopping_cart",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "add_non_existing_recipe_to_shopping_cart // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 400\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"При попытке добавить несуществующий рецепт в корзину должен вернуться ответ со статусом 400\"",
											"    ).to.be.eql(\"Bad Request\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/recipes/9876/shopping_cart/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"recipes",
										"9876",
										"shopping_cart",
										""
									]
								}
							},
							"response": []
						}
					]
				}
			],
			"auth": {
				"type": "apikey",
				"apikey": [
					{
						"key": "value",
						"value": "Token {{userToken}}",
						"type": "string"
					},
					{
						"key": "key",
						"value": "Authorization",
						"type": "string"
					}
				]
			},
			"event": [
				{
					"listen": "prerequest",
					"script": {
						"type": "text/javascript",
						"exec": [
							""
						]
					}
				},
				{
					"listen": "test",
					"script": {
						"type": "text/javascript",
						"exec": [
							""
						]
					}
				}
			]
		},
		{
			"name": "favorite",
			"item": [
				{
					"name": "add_to_favorite",
					"item": [
						{
							"name": "add_to_favorite // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"const responseSchema = {",
											"    \"type\": \"object\",",
											"    \"properties\": {",
											"        \"id\": {\"type\": \"number\"},",
											"        \"name\": {\"type\": \"string\"},",
											"        \"image\": {\"type\": \"string\"},",
											"        \"cooking_time\": {\"type\": \"number\"}",
											"    },",
											"    \"required\": [\"id\", \"name\", \"image\", \"cooking_time\"],",
											"    \"additionalProperties\": false",
											"};",
											"",
											"pm.test(\"Статус-код ответа должен быть 201\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос зарегистрированного пользователя на добавление рецепта в избранное должен вернуть ответ со статус-кодом 201\"",
											"    ).to.be.eql(\"Created\");",
											"});",
											"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
											"    pm.response.to.have.jsonSchema(responseSchema);",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/recipes/{{firstRecipeId}}/favorite/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"recipes",
										"{{firstRecipeId}}",
										"favorite",
										""
									]
								}
							},
							"response": []
						}
					]
				},
				{
					"name": "favorite_bad_requests",
					"item": [
						{
							"name": "add_to_favorite // No Auth",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 401\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос неавторизованного пользователя на добавление рецепта в избранное должен вернуть ответ со статусом 401\"",
											"    ).to.be.eql(\"Unauthorized\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "noauth"
								},
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/recipes/{{firstRecipeId}}/favorite/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"recipes",
										"{{firstRecipeId}}",
										"favorite",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "add_again_to_favorite // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 400\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"При попытке повторно добавить рецепт в избранное должен вернуться ответ со статусом 400\"",
											"    ).to.be.eql(\"Bad Request\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/recipes/{{firstRecipeId}}/favorite/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"recipes",
										"{{firstRecipeId}}",
										"favorite",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "add_non_existing_recipe_to_favorite // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 400\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"При попытке добавить несуществующий рецепт в избранное должен вернуться ответ со статусом 400\"",
											"    ).to.be.eql(\"Bad Request\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/recipes/9876/favorite/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"recipes",
										"9876",
										"favorite",
										""
									]
								}
							},
							"response": []
						}
					]
				}
			],
			"auth": {
				"type": "apikey",
				"apikey": [
					{
						"key": "value",
						"value": "Token {{userToken}}",
						"type": "string"
					},
					{
						"key": "key",
						"value": "Authorization",
						"type": "string"
					}
				]
			},
			"event": [
				{
					"listen": "prerequest",
					"script": {
						"type": "text/javascript",
						"exec": [
							""
						]
					}
				},
				{
					"listen": "test",
					"script": {
						"type": "text/javascript",
						"exec": [
							""
						]
					}
				}
			]
		},
		{
			"name": "recipe_filters_for_favorite_and_shopping_cart",
			"item": [
				{
					"name": "get_recipes_list_with_is_in_shopping_cart_param // User",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"const responseSchema = {",
									"    \"type\": \"object\",",
									"    \"required\": [\"count\", \"next\", \"previous\", \"results\"],",
									"    \"additionalProperties\": false,",
									"    \"properties\": {",
									"        \"count\": {\"type\": \"number\"},",
									"        \"next\": {\"type\": [\"string\", \"null\"]},",
									"        \"previous\": {\"type\": [\"string\", \"null\"]},",
									"        \"results\": {",
									"            \"type\": \"array\",",
									"            \"items\": {",
									"                \"type\": \"object\",",
									"                \"properties\":{",
									"                    \"id\": {\"type\": \"number\"},",
									"                    \"tags\": {",
									"                        \"type\": \"array\",",
									"                        \"items\": {",
									"                            \"type\": \"object\",",
									"                            \"properties\": {",
									"                                \"id\": {\"type\": \"number\"},",
									"                                \"name\": {\"type\": \"string\"},",
									"                                \"color\": {\"type\": \"string\"},",
									"                                \"slug\": {\"type\": \"string\"},",
									"                            },",
									"                            \"required\": [\"id\", \"name\", \"color\", \"slug\"],",
									"                            \"additionalProperties\": false",
									"                        }",
									"                    },",
									"                    \"author\": {",
									"                        \"type\": \"object\",",
									"                        \"properties\": {",
									"                            \"id\": {\"type\": \"number\"},",
									"                            \"username\": {\"type\": \"string\"},",
									"                            \"first_name\": {\"type\": \"string\"},",
									"                            \"last_name\": {\"type\": \"string\"},",
									"                            \"email\": {\"type\": \"string\"},",
									"                            \"is_subscribed\": {\"type\": \"boolean\"}",
									"                        },",
									"                        \"required\": [\"id\", \"username\", \"first_name\", \"last_name\", \"email\"],",
									"                        \"additionalProperties\": false",
									"                    },",
									"                    \"ingredients\": {",
									"                        \"type\": \"array\",",
									"                        \"items\": {",
									"                            \"type\": \"object\",",
									"                            \"properties\": {",
									"                                \"id\": {\"type\": \"number\"},",
									"                                \"name\": {\"type\": \"string\"},",
									"                                \"measurement_unit\": {\"type\": \"string\"},",
									"                                \"amount\": {\"type\": \"number\"}",
									"                            },",
									"                            \"required\": [\"id\", \"name\", \"measurement_unit\", \"amount\"],",
									"                            \"additionalProperties\": false",
									"                        }",
									"                    },",
									"                    \"is_favorited\": {\"type\": \"boolean\"},",
									"                    \"is_in_shopping_cart\": {\"type\": \"boolean\"},",
									"                    \"name\": {\"type\": \"string\"},",
									"                    \"image\": {\"type\": \"string\"},",
									"                    \"text\": {\"type\": \"string\"},",
									"                    \"cooking_time\": {\"type\": \"number\"}",
									"                },",
									"                \"required\": [",
									"                    \"id\", \"tags\", \"author\", \"ingredients\", \"is_favorited\", \"is_in_shopping_cart\",",
									"                    \"name\", \"image\", \"text\", \"cooking_time\"",
									"                ],",
									"                \"additionalProperties\": false",
									"            }",
									"        }",
									"        ",
									"    }",
									"};",
									"",
									"pm.test(\"Статус-код ответа должен быть 200\", function () {",
									"    pm.expect(",
									"        pm.response.status,",
									"        \"Запрос зарегистрированного пользователя должен вернуть ответ со статус-кодом 200\"",
									"    ).to.be.eql(\"OK\");",
									"});",
									"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
									"    pm.expect(",
									"        pm.response,",
									"        \"Убедитесь, что для запрошенного эндпоинта корректно настроена пагинация\"",
									"    ).to.have.jsonSchema({\"type\": \"object\"});",
									"    pm.response.to.have.jsonSchema(responseSchema);",
									"});",
									"pm.test(",
									"    \"Должна быть возможность фильтровать рецепты через параметр запроса `is_in_shopping_cart`\",",
									"    function () {",
									"        assert_msg = \"Убедитесь, что с помощью параметра запроса `is_in_shopping_cart` можно отфильтровать рецепты, добавленные в корзину пользователя\" ",
									"        const authorId = Number(pm.request.url.query.get(\"author\"));",
									"        const responseData = pm.response.json();",
									"        pm.expect(",
									"            responseData.results.length > 0,",
									"            assert_msg",
									"        ).to.be.true",
									"        for (elem of responseData.results) {",
									"            pm.expect(",
									"                elem.is_in_shopping_cart,",
									"                assert_msg",
									"            ).to.be.true;",
									"        };",
									"    }",
									");"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"auth": {
							"type": "apikey",
							"apikey": [
								{
									"key": "value",
									"value": "Token {{userToken}}",
									"type": "string"
								},
								{
									"key": "key",
									"value": "Authorization",
									"type": "string"
								}
							]
						},
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{baseUrl}}/api/recipes/?is_in_shopping_cart=1",
							"host": [
								"{{baseUrl}}"
							],
							"path": [
								"api",
								"recipes",
								""
							],
							"query": [
								{
									"key": "is_in_shopping_cart",
									"value": "1"
								}
							]
						}
					},
					"response": []
				},
				{
					"name": "get_recipes_list_with_is_in_shopping_cart_param // No Auth",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"const responseSchema = {",
									"    \"type\": \"object\",",
									"    \"required\": [\"count\", \"next\", \"previous\", \"results\"],",
									"    \"additionalProperties\": false,",
									"    \"properties\": {",
									"        \"count\": {\"type\": \"number\"},",
									"        \"next\": {\"type\": [\"string\", \"null\"]},",
									"        \"previous\": {\"type\": [\"string\", \"null\"]},",
									"        \"results\": {",
									"            \"type\": \"array\",",
									"            \"items\": {",
									"                \"type\": \"object\",",
									"                \"properties\":{",
									"                    \"id\": {\"type\": \"number\"},",
									"                    \"tags\": {",
									"                        \"type\": \"array\",",
									"                        \"items\": {",
									"                            \"type\": \"object\",",
									"                            \"properties\": {",
									"                                \"id\": {\"type\": \"number\"},",
									"                                \"name\": {\"type\": \"string\"},",
									"                                \"color\": {\"type\": \"string\"},",
									"                                \"slug\": {\"type\": \"string\"},",
									"                            },",
									"                            \"required\": [\"id\", \"name\", \"color\", \"slug\"],",
									"                            \"additionalProperties\": false",
									"                        }",
									"                    },",
									"                    \"author\": {",
									"                        \"type\": \"object\",",
									"                        \"properties\": {",
									"                            \"id\": {\"type\": \"number\"},",
									"                            \"username\": {\"type\": \"string\"},",
									"                            \"first_name\": {\"type\": \"string\"},",
									"                            \"last_name\": {\"type\": \"string\"},",
									"                            \"email\": {\"type\": \"string\"},",
									"                            \"is_subscribed\": {\"type\": \"boolean\"}",
									"                        },",
									"                        \"required\": [\"id\", \"username\", \"first_name\", \"last_name\", \"email\"],",
									"                        \"additionalProperties\": false",
									"                    },",
									"                    \"ingredients\": {",
									"                        \"type\": \"array\",",
									"                        \"items\": {",
									"                            \"type\": \"object\",",
									"                            \"properties\": {",
									"                                \"id\": {\"type\": \"number\"},",
									"                                \"name\": {\"type\": \"string\"},",
									"                                \"measurement_unit\": {\"type\": \"string\"},",
									"                                \"amount\": {\"type\": \"number\"}",
									"                            },",
									"                            \"required\": [\"id\", \"name\", \"measurement_unit\", \"amount\"],",
									"                            \"additionalProperties\": false",
									"                        }",
									"                    },",
									"                    \"is_favorited\": {\"type\": \"boolean\"},",
									"                    \"is_in_shopping_cart\": {\"type\": \"boolean\"},",
									"                    \"name\": {\"type\": \"string\"},",
									"                    \"image\": {\"type\": \"string\"},",
									"                    \"text\": {\"type\": \"string\"},",
									"                    \"cooking_time\": {\"type\": \"number\"}",
									"                },",
									"                \"required\": [",
									"                    \"id\", \"tags\", \"author\", \"ingredients\", \"is_favorited\", \"is_in_shopping_cart\",",
									"                    \"name\", \"image\", \"text\", \"cooking_time\"",
									"                ],",
									"                \"additionalProperties\": false",
									"            }",
									"        }",
									"        ",
									"    }",
									"};",
									"",
									"pm.test(\"Статус-код ответа должен быть 200\", function () {",
									"    pm.expect(",
									"        pm.response.status,",
									"        \"Запрос с параметром `is_favorited`, отправленный незарегистрированным пользователем, должен вернуть ответ со статусом 200\"",
									"    ).to.be.eql(\"OK\");",
									"});",
									"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
									"    pm.expect(",
									"        pm.response,",
									"        \"Убедитесь, что для запрошенного эндпоинта корректно настроена пагинация\"",
									"    ).to.have.jsonSchema({\"type\": \"object\"});",
									"    pm.response.to.have.jsonSchema(responseSchema);",
									"});",
									""
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"auth": {
							"type": "noauth"
						},
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{baseUrl}}/api/recipes/?is_in_shopping_cart=1",
							"host": [
								"{{baseUrl}}"
							],
							"path": [
								"api",
								"recipes",
								""
							],
							"query": [
								{
									"key": "is_in_shopping_cart",
									"value": "1"
								}
							]
						}
					},
					"response": []
				},
				{
					"name": "get_recipes_list_with_is_favorited_param // User",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"const responseSchema = {",
									"    \"type\": \"object\",",
									"    \"required\": [\"count\", \"next\", \"previous\", \"results\"],",
									"    \"additionalProperties\": false,",
									"    \"properties\": {",
									"        \"count\": {\"type\": \"number\"},",
									"        \"next\": {\"type\": [\"string\", \"null\"]},",
									"        \"previous\": {\"type\": [\"string\", \"null\"]},",
									"        \"results\": {",
									"            \"type\": \"array\",",
									"            \"items\": {",
									"                \"type\": \"object\",",
									"                \"properties\":{",
									"                    \"id\": {\"type\": \"number\"},",
									"                    \"tags\": {",
									"                        \"type\": \"array\",",
									"                        \"items\": {",
									"                            \"type\": \"object\",",
									"                            \"properties\": {",
									"                                \"id\": {\"type\": \"number\"},",
									"                                \"name\": {\"type\": \"string\"},",
									"                                \"color\": {\"type\": \"string\"},",
									"                                \"slug\": {\"type\": \"string\"},",
									"                            },",
									"                            \"required\": [\"id\", \"name\", \"color\", \"slug\"],",
									"                            \"additionalProperties\": false",
									"                        }",
									"                    },",
									"                    \"author\": {",
									"                        \"type\": \"object\",",
									"                        \"properties\": {",
									"                            \"id\": {\"type\": \"number\"},",
									"                            \"username\": {\"type\": \"string\"},",
									"                            \"first_name\": {\"type\": \"string\"},",
									"                            \"last_name\": {\"type\": \"string\"},",
									"                            \"email\": {\"type\": \"string\"},",
									"                            \"is_subscribed\": {\"type\": \"boolean\"}",
									"                        },",
									"                        \"required\": [\"id\", \"username\", \"first_name\", \"last_name\", \"email\"],",
									"                        \"additionalProperties\": false",
									"                    },",
									"                    \"ingredients\": {",
									"                        \"type\": \"array\",",
									"                        \"items\": {",
									"                            \"type\": \"object\",",
									"                            \"properties\": {",
									"                                \"id\": {\"type\": \"number\"},",
									"                                \"name\": {\"type\": \"string\"},",
									"                                \"measurement_unit\": {\"type\": \"string\"},",
									"                                \"amount\": {\"type\": \"number\"}",
									"                            },",
									"                            \"required\": [\"id\", \"name\", \"measurement_unit\", \"amount\"],",
									"                            \"additionalProperties\": false",
									"                        }",
									"                    },",
									"                    \"is_favorited\": {\"type\": \"boolean\"},",
									"                    \"is_in_shopping_cart\": {\"type\": \"boolean\"},",
									"                    \"name\": {\"type\": \"string\"},",
									"                    \"image\": {\"type\": \"string\"},",
									"                    \"text\": {\"type\": \"string\"},",
									"                    \"cooking_time\": {\"type\": \"number\"}",
									"                },",
									"                \"required\": [",
									"                    \"id\", \"tags\", \"author\", \"ingredients\", \"is_favorited\", \"is_in_shopping_cart\",",
									"                    \"name\", \"image\", \"text\", \"cooking_time\"",
									"                ],",
									"                \"additionalProperties\": false",
									"            }",
									"        }",
									"        ",
									"    }",
									"};",
									"",
									"pm.test(\"Статус-код ответа должен быть 200\", function () {",
									"    pm.expect(",
									"        pm.response.status,",
									"        \"GET-запрос зарегистрированного пользователя к `/api/recipes/` должен вернуть ответ со статус-кодом 200\"",
									"    ).to.be.eql(\"OK\");",
									"});",
									"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
									"    pm.expect(",
									"        pm.response,",
									"        \"Убедитесь, что для запрошенного эндпоинта корректно настроена пагинация\"",
									"    ).to.have.jsonSchema({\"type\": \"object\"});",
									"    pm.response.to.have.jsonSchema(responseSchema);",
									"});",
									"pm.test(",
									"    \"Должна быть возможность фильтровать рецепты через параметр запроса `is_favorited`\",",
									"    function () {",
									"        assert_msg = \"Убедитесь, что с помощью параметра запроса `is_favorited` можно отфильтровать рецепты, добавленные в 'Избранное' пользователя\" ",
									"        const responseData = pm.response.json();",
									"        pm.expect(",
									"            responseData.results.length > 0,",
									"            assert_msg",
									"        ).to.be.true",
									"        for (elem of responseData.results) {",
									"            pm.expect(",
									"                elem.is_favorited,",
									"                assert_msg",
									"            ).to.be.true;",
									"        };",
									"    }",
									");"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"auth": {
							"type": "apikey",
							"apikey": [
								{
									"key": "value",
									"value": "Token {{userToken}}",
									"type": "string"
								},
								{
									"key": "key",
									"value": "Authorization",
									"type": "string"
								}
							]
						},
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{baseUrl}}/api/recipes/?is_favorited=1",
							"host": [
								"{{baseUrl}}"
							],
							"path": [
								"api",
								"recipes",
								""
							],
							"query": [
								{
									"key": "is_favorited",
									"value": "1"
								}
							]
						}
					},
					"response": []
				},
				{
					"name": "get_recipes_list_with_is_favorited_param // No Auth",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"const responseSchema = {",
									"    \"type\": \"object\",",
									"    \"required\": [\"count\", \"next\", \"previous\", \"results\"],",
									"    \"additionalProperties\": false,",
									"    \"properties\": {",
									"        \"count\": {\"type\": \"number\"},",
									"        \"next\": {\"type\": [\"string\", \"null\"]},",
									"        \"previous\": {\"type\": [\"string\", \"null\"]},",
									"        \"results\": {",
									"            \"type\": \"array\",",
									"            \"items\": {",
									"                \"type\": \"object\",",
									"                \"properties\":{",
									"                    \"id\": {\"type\": \"number\"},",
									"                    \"tags\": {",
									"                        \"type\": \"array\",",
									"                        \"items\": {",
									"                            \"type\": \"object\",",
									"                            \"properties\": {",
									"                                \"id\": {\"type\": \"number\"},",
									"                                \"name\": {\"type\": \"string\"},",
									"                                \"color\": {\"type\": \"string\"},",
									"                                \"slug\": {\"type\": \"string\"},",
									"                            },",
									"                            \"required\": [\"id\", \"name\", \"color\", \"slug\"],",
									"                            \"additionalProperties\": false",
									"                        }",
									"                    },",
									"                    \"author\": {",
									"                        \"type\": \"object\",",
									"                        \"properties\": {",
									"                            \"id\": {\"type\": \"number\"},",
									"                            \"username\": {\"type\": \"string\"},",
									"                            \"first_name\": {\"type\": \"string\"},",
									"                            \"last_name\": {\"type\": \"string\"},",
									"                            \"email\": {\"type\": \"string\"},",
									"                            \"is_subscribed\": {\"type\": \"boolean\"}",
									"                        },",
									"                        \"required\": [\"id\", \"username\", \"first_name\", \"last_name\", \"email\"],",
									"                        \"additionalProperties\": false",
									"                    },",
									"                    \"ingredients\": {",
									"                        \"type\": \"array\",",
									"                        \"items\": {",
									"                            \"type\": \"object\",",
									"                            \"properties\": {",
									"                                \"id\": {\"type\": \"number\"},",
									"                                \"name\": {\"type\": \"string\"},",
									"                                \"measurement_unit\": {\"type\": \"string\"},",
									"                                \"amount\": {\"type\": \"number\"}",
									"                            },",
									"                            \"required\": [\"id\", \"name\", \"measurement_unit\", \"amount\"],",
									"                            \"additionalProperties\": false",
									"                        }",
									"                    },",
									"                    \"is_favorited\": {\"type\": \"boolean\"},",
									"                    \"is_in_shopping_cart\": {\"type\": \"boolean\"},",
									"                    \"name\": {\"type\": \"string\"},",
									"                    \"image\": {\"type\": \"string\"},",
									"                    \"text\": {\"type\": \"string\"},",
									"                    \"cooking_time\": {\"type\": \"number\"}",
									"                },",
									"                \"required\": [",
									"                    \"id\", \"tags\", \"author\", \"ingredients\", \"is_favorited\", \"is_in_shopping_cart\",",
									"                    \"name\", \"image\", \"text\", \"cooking_time\"",
									"                ],",
									"                \"additionalProperties\": false",
									"            }",
									"        }",
									"        ",
									"    }",
									"};",
									"",
									"pm.test(\"Статус-код ответа должен быть 200\", function () {",
									"    pm.expect(",
									"        pm.response.status,",
									"        \"Запрос с параметром `is_favorited`, отправленный незарегистрированным пользователем, должен вернуть ответ со статусом 200\"",
									"    ).to.be.eql(\"OK\");",
									"});",
									"pm.test('Структура ответа должна соответствовать ожидаемой', function () {",
									"    pm.expect(",
									"        pm.response,",
									"        \"Убедитесь, что для запрошенного эндпоинта корректно настроена пагинация\"",
									"    ).to.have.jsonSchema({\"type\": \"object\"});",
									"    pm.response.to.have.jsonSchema(responseSchema);",
									"});",
									""
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"auth": {
							"type": "noauth"
						},
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{baseUrl}}/api/recipes/?is_favorited=1",
							"host": [
								"{{baseUrl}}"
							],
							"path": [
								"api",
								"recipes",
								""
							],
							"query": [
								{
									"key": "is_favorited",
									"value": "1"
								}
							]
						}
					},
					"response": []
				}
			]
		},
		{
			"name": "delete_requests",
			"item": [
				{
					"name": "subscriptions",
					"item": [
						{
							"name": "bad_requests",
							"item": [
								{
									"name": "delete_subscription // No Auth",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 401\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Запрос неавторизованного пользователя на удаление подписки должен вернуть ответ со статусом 401\"",
													"    ).to.be.eql(\"Unauthorized\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "noauth"
										},
										"method": "DELETE",
										"header": [],
										"url": {
											"raw": "{{baseUrl}}/api/users/{{thirdUserId}}/subscribe/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"users",
												"{{thirdUserId}}",
												"subscribe",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "delete_non_existing_subscription // Second User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"При попытке пользователя удалить несуществующую подписку должен вернуться ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{secondUserToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "DELETE",
										"header": [],
										"url": {
											"raw": "{{baseUrl}}/api/users/{{thirdUserId}}/subscribe/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"users",
												"{{thirdUserId}}",
												"subscribe",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "delete_subscription_with_non_existing_author_in_url // Second User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 404\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"При попытке пользователя удалить подписку на несуществующего автора должен вернуться ответ со статусом 404\"",
													"    ).to.be.eql(\"Not Found\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{secondUserToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "DELETE",
										"header": [],
										"url": {
											"raw": "{{baseUrl}}/api/users/9876/subscribe/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"users",
												"9876",
												"subscribe",
												""
											]
										}
									},
									"response": []
								}
							]
						},
						{
							"name": "delete_first_subscription // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 204\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос зарегистрированного пользователя на удаление существующей подписки должен вернуть ответ со статус-кодом 204\"",
											"    ).to.be.eql(\"No Content\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "DELETE",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/users/{{thirdUserId}}/subscribe/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										"{{thirdUserId}}",
										"subscribe",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "delete_second_subscription // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 204\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос зарегистрированного пользователя на удаление существующей подписки должен вернуть ответ со статус-кодом 204\"",
											"    ).to.be.eql(\"No Content\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "DELETE",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/users/{{secondUserId}}/subscribe/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"users",
										"{{secondUserId}}",
										"subscribe",
										""
									]
								}
							},
							"response": []
						}
					]
				},
				{
					"name": "shopping_cart",
					"item": [
						{
							"name": "bad_requests",
							"item": [
								{
									"name": "remove_from_shopping_cart // No Auth",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 401\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Запрос неавторизованного пользователя на удаление рецепта из корзины должен вернуть ответ со статусом 401\"",
													"    ).to.be.eql(\"Unauthorized\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "noauth"
										},
										"method": "DELETE",
										"header": [],
										"url": {
											"raw": "{{baseUrl}}/api/recipes/{{firstRecipeId}}/shopping_cart/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												"{{firstRecipeId}}",
												"shopping_cart",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "remove_not_added_from_shopping_cart // Second User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Запрос зарегистрированного пользователя на удаление из корзины рецепта, который не был туда добавлен, должен вернуть ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{secondUserToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "DELETE",
										"header": [],
										"url": {
											"raw": "{{baseUrl}}/api/recipes/{{firstRecipeId}}/shopping_cart/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												"{{firstRecipeId}}",
												"shopping_cart",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "remove_non_existing_recipe_from_shopping_cart // Second User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 404\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"При попытке пользователя удалить несуществующий рецепт из корзины должен вернуться ответ со статусом 404\"",
													"    ).to.be.eql(\"Not Found\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{secondUserToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "DELETE",
										"header": [],
										"url": {
											"raw": "{{baseUrl}}/api/recipes/9876/shopping_cart/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												"9876",
												"shopping_cart",
												""
											]
										}
									},
									"response": []
								}
							]
						},
						{
							"name": "remove_from_shopping_cart // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 204\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос зарегистрированного пользователя на удаление ранее добавленного рецепта из корзины должен вернуть ответ со статус-кодом 204\"",
											"    ).to.be.eql(\"No Content\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "DELETE",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/recipes/{{firstRecipeId}}/shopping_cart/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"recipes",
										"{{firstRecipeId}}",
										"shopping_cart",
										""
									]
								}
							},
							"response": []
						}
					]
				},
				{
					"name": "favorite",
					"item": [
						{
							"name": "bad_requests",
							"item": [
								{
									"name": "remove_from_favorite // No Auth",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 401\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Запрос неавторизованного пользователя на удаление рецепта из избранного должен вернуть ответ со статусом 401\"",
													"    ).to.be.eql(\"Unauthorized\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "noauth"
										},
										"method": "DELETE",
										"header": [],
										"url": {
											"raw": "{{baseUrl}}/api/recipes/{{firstRecipeId}}/favorite/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												"{{firstRecipeId}}",
												"favorite",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "remove_not_added_from_favorite // Second User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 400\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Запрос пользователя на удаление из избранного рецепта, который не был туда добавлен, должен вернуть ответ со статусом 400\"",
													"    ).to.be.eql(\"Bad Request\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{secondUserToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "DELETE",
										"header": [],
										"url": {
											"raw": "{{baseUrl}}/api/recipes/{{firstRecipeId}}/favorite/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												"{{firstRecipeId}}",
												"favorite",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "remove_non_existing_recipe_from_favorite // Second User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 404\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"При попытке пользователя удалить несуществующий рецепт из избранного должен вернуться ответ со статусом 404\"",
													"    ).to.be.eql(\"Not Found\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{secondUserToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "DELETE",
										"header": [],
										"url": {
											"raw": "{{baseUrl}}/api/recipes/9876/favorite/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												"9876",
												"favorite",
												""
											]
										}
									},
									"response": []
								}
							]
						},
						{
							"name": "remove_from_favorite // User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 204\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос зарегистрированного пользователя на удаление ранее добавленного рецепта из избранного должен вернуть ответ со статус-кодом 204\"",
											"    ).to.be.eql(\"No Content\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "DELETE",
								"header": [],
								"url": {
									"raw": "{{baseUrl}}/api/recipes/{{firstRecipeId}}/favorite/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"recipes",
										"{{firstRecipeId}}",
										"favorite",
										""
									]
								}
							},
							"response": []
						}
					]
				},
				{
					"name": "recipes",
					"item": [
						{
							"name": "bad_requests",
							"item": [
								{
									"name": "delete_recipe // No Auth",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 401\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Запрос незарегистрированного пользователя на удаление рецепта должен вернуть ответ со статусом 401\"",
													"    ).to.be.eql(\"Unauthorized\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "noauth"
										},
										"method": "DELETE",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": 1123,\n      \"amount\": 10\n    }\n  ],\n  \"tags\": [\n    1,\n    2\n  ],\n  \"image\": \"\",\n  \"name\": \"string\",\n  \"text\": \"string\",\n  \"cooking_time\": 1\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/{{fifthRecipeId}}/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												"{{fifthRecipeId}}",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "delete_recipe_not_by_author // Second User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 403\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"Запрос пользователя на удаление чужого рецепта должен вернуть ответ со статусом 403\"",
													"    ).to.be.eql(\"Forbidden\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{secondUserToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "DELETE",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": 1123,\n      \"amount\": 10\n    }\n  ],\n  \"tags\": [\n    1,\n    2\n  ],\n  \"image\": \"\",\n  \"name\": \"string\",\n  \"text\": \"string\",\n  \"cooking_time\": 1\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/{{fifthRecipeId}}/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												"{{fifthRecipeId}}",
												""
											]
										}
									},
									"response": []
								},
								{
									"name": "delete_non_existing_recipe // Second User",
									"event": [
										{
											"listen": "test",
											"script": {
												"exec": [
													"pm.test(\"Статус-код ответа должен быть 404\", function () {",
													"    pm.expect(",
													"        pm.response.status,",
													"        \"При попытке пользователя удалить несуществующий рецепт должен вернуться ответ со статусом 404\"",
													"    ).to.be.eql(\"Not Found\");",
													"});"
												],
												"type": "text/javascript"
											}
										}
									],
									"request": {
										"auth": {
											"type": "apikey",
											"apikey": [
												{
													"key": "value",
													"value": "Token {{secondUserToken}}",
													"type": "string"
												},
												{
													"key": "key",
													"value": "Authorization",
													"type": "string"
												}
											]
										},
										"method": "DELETE",
										"header": [],
										"body": {
											"mode": "raw",
											"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": 1123,\n      \"amount\": 10\n    }\n  ],\n  \"tags\": [\n    1,\n    2\n  ],\n  \"image\": \"\",\n  \"name\": \"string\",\n  \"text\": \"string\",\n  \"cooking_time\": 1\n}",
											"options": {
												"raw": {
													"language": "json"
												}
											}
										},
										"url": {
											"raw": "{{baseUrl}}/api/recipes/9876/",
											"host": [
												"{{baseUrl}}"
											],
											"path": [
												"api",
												"recipes",
												"9876",
												""
											]
										}
									},
									"response": []
								}
							]
						},
						{
							"name": "delete_first_recipe // Second User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 204\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос автора на удаление собственного рецепта должен вернуть ответ со статус-кодом 204\"",
											"    ).to.be.eql(\"No Content\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{secondUserToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "DELETE",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": 1123,\n      \"amount\": 10\n    }\n  ],\n  \"tags\": [\n    1,\n    2\n  ],\n  \"image\": \"\",\n  \"name\": \"string\",\n  \"text\": \"string\",\n  \"cooking_time\": 1\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/recipes/{{firstRecipeId}}/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"recipes",
										"{{firstRecipeId}}",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "delete_second_recipe // Second User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 204\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос автора на удаление собственного рецепта должен вернуть ответ со статус-кодом 204\"",
											"    ).to.be.eql(\"No Content\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{secondUserToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "DELETE",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": 1123,\n      \"amount\": 10\n    }\n  ],\n  \"tags\": [\n    1,\n    2\n  ],\n  \"image\": \"\",\n  \"name\": \"string\",\n  \"text\": \"string\",\n  \"cooking_time\": 1\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/recipes/{{secondRecipeId}}/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"recipes",
										"{{secondRecipeId}}",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "delete_third_recipe // Second User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 204\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос автора на удаление собственного рецепта должен вернуть ответ со статус-кодом 204\"",
											"    ).to.be.eql(\"No Content\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{secondUserToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "DELETE",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": 1123,\n      \"amount\": 10\n    }\n  ],\n  \"tags\": [\n    1,\n    2\n  ],\n  \"image\": \"\",\n  \"name\": \"string\",\n  \"text\": \"string\",\n  \"cooking_time\": 1\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/recipes/{{thirdRecipeId}}/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"recipes",
										"{{thirdRecipeId}}",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "delete_fourth_recipe // Second User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 204\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос автора на удаление собственного рецепта должен вернуть ответ со статус-кодом 204\"",
											"    ).to.be.eql(\"No Content\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{secondUserToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "DELETE",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": 1123,\n      \"amount\": 10\n    }\n  ],\n  \"tags\": [\n    1,\n    2\n  ],\n  \"image\": \"\",\n  \"name\": \"string\",\n  \"text\": \"string\",\n  \"cooking_time\": 1\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/recipes/{{fourthRecipeId}}/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"recipes",
										"{{fourthRecipeId}}",
										""
									]
								}
							},
							"response": []
						},
						{
							"name": "delete_fifth_recipe // Second User",
							"event": [
								{
									"listen": "test",
									"script": {
										"exec": [
											"pm.test(\"Статус-код ответа должен быть 204\", function () {",
											"    pm.expect(",
											"        pm.response.status,",
											"        \"Запрос автора на удаление собственного рецепта должен вернуть ответ со статус-кодом 204\"",
											"    ).to.be.eql(\"No Content\");",
											"});"
										],
										"type": "text/javascript"
									}
								}
							],
							"request": {
								"auth": {
									"type": "apikey",
									"apikey": [
										{
											"key": "value",
											"value": "Token {{userToken}}",
											"type": "string"
										},
										{
											"key": "key",
											"value": "Authorization",
											"type": "string"
										}
									]
								},
								"method": "DELETE",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n  \"ingredients\": [\n    {\n      \"id\": 1123,\n      \"amount\": 10\n    }\n  ],\n  \"tags\": [\n    1,\n    2\n  ],\n  \"image\": \"\",\n  \"name\": \"string\",\n  \"text\": \"string\",\n  \"cooking_time\": 1\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{baseUrl}}/api/recipes/{{fifthRecipeId}}/",
									"host": [
										"{{baseUrl}}"
									],
									"path": [
										"api",
										"recipes",
										"{{fifthRecipeId}}",
										""
									]
								}
							},
							"response": []
						}
					]
				}
			]
		}
	],
	"event": [
		{
			"listen": "prerequest",
			"script": {
				"type": "text/javascript",
				"exec": [
					""
				]
			}
		},
		{
			"listen": "test",
			"script": {
				"type": "text/javascript",
				"exec": [
					""
				]
			}
		}
	],
	"variable": [
		{
			"key": "baseUrl",
			"value": "http://127.0.0.1:8000",
			"type": "string"
		},
		{
			"key": "username",
			"value": "\"vasya.pupkin\"",
			"type": "string"
		},
		{
			"key": "password",
			"value": "\"MySecretPas$word\"",
			"type": "string"
		},
		{
			"key": "email",
			"value": "\"vpupkin@yandex.ru\"",
			"type": "string"
		},
		{
			"key": "tooLongEmail",
			"value": "i_have_never_seen_an_email_address_longer_than_two_hundred_and_fifty_four_characters_and_it_was_difficult_to_come_up_with_it_so_in_the_second_part_just_the_names_of_some_mail_services@yandex-google-yahoo-mailgun-protonmail-mailru-outlook-icloud-aol-neo.ru",
			"type": "string"
		},
		{
			"key": "tooLongUsername",
			"value": "the-username-that-is-150-characters-long-and-should-not-pass-validation-if-the-serializer-is-configured-correctly-otherwise-the-current-test-will-fail-",
			"type": "string"
		},
		{
			"key": "newPassword",
			"value": "\"thi$Pa$$w0rdW@sCh@nged\"",
			"type": "string"
		},
		{
			"key": "firstIngredientAmount",
			"value": "10",
			"type": "string"
		},
		{
			"key": "secondIngredientAmount",
			"value": "20",
			"type": "string"
		},
		{
			"key": "secondUserEmail",
			"value": "\"second_user@email.org\"",
			"type": "string"
		},
		{
			"key": "secondUserUsername",
			"value": "\"second-user\"",
			"type": "string"
		},
		{
			"key": "tooLongName",
			"value": "Старинный рецепт, передаваемый из поколения в поколение через сказки и народные предания. Немногие могут правильно его приготовить. Большая сложность обусловлена названием, которое длиннее 200 символов",
			"type": "string"
		},
		{
			"key": "thirdUserEmail",
			"value": "\"third-user@user.ru\"",
			"type": "string"
		},
		{
			"key": "thirdUserUsername",
			"value": "\"third-user-username\"",
			"type": "string"
		}
	]
}